mdurrant / php-binary-reader
PHP的二进制读取器,轻量级
Requires
- php: >=5.4
Requires (Dev)
- phpunit/phpunit: ~4.0
- squizlabs/php_codesniffer: ~1.0
README
为什么?
如果你没有遇到需要利用PHP读取二进制数据流的情况,你可能不会在这里。坦白说,PHP在这方面真的很糟糕,但既然我们不得不使用它,我们最好尽力让它变得尽可能轻松。
这个二进制读取器的作用是接受一个文件内容字符串或文件资源,并提供一组受.NET启发的遍历方法。
关于字节序的说明
读取器设计用于在小端机器上运行,这适用于大多数场景,因为所有x86和x86-64机器都是小端。如果你发现自己在大端机器上,你需要通知类,否则你可能无法正确读取你解析的文件中的有符号整数。
$fileData = file_get_contents('somefile.bin'); $br = new BinaryReader($fileData); $br->setMachineByteOrder(Endian::ENDIAN_BIG); ...
示例用法
$fileData = file_get_contents('somefile.bin'); $br = new BinaryReader($fileData, Endian::ENDIAN_LITTLE); // or $fileResource = fopen('somefile.bin', 'rb'); $br = new BinaryReader($fileResource, Endian::ENDIAN_LITTLE); $magic = $br->readUInt32(); $offset = $br->readUInt16(); $length = $br->readUInt16(); ...
方法
__construct($input, $endian) 必须提供字符串或文件资源以使用此类,字节序是可选的(字符串[big|little],或使用Endian类中的常量),如果没有提供,则默认为小端。
readUInt8() 返回一个单字节无符号整数
readInt8() 返回一个单字节有符号整数
readUInt16() 返回一个16位短整型无符号整数
readInt16() 返回一个16位短整型有符号整数
readUInt32() 返回一个32位无符号整数
readInt32() 返回一个32位有符号整数
readUInt64() 返回一个64位无符号整数
readInt64() 返回一个64位有符号整数
readSingle() 返回一个4字节浮点数
readUBits($length) 返回可变长度的位(无符号)
readBits($length) 返回可变长度的位(有符号)
readBytes($length) 返回可变长度的字节
readString($length) 返回可变长度的字符串
readAlignedString($length) 将指针对齐到0位并返回可变长度的字符串
align() 将指针对齐回0位
isEof() 如果指针位于文件的最后一个字节,则返回true
getPosition() 返回文件中的当前字节位置
setPosition($position) 设置当前字节位置
getCurrentBit() 返回文件中的当前位位置
setCurrentBit($currentBit) 设置当前位位置
贡献
贡献必须遵循PSR2编码标准,并且不能降低100%覆盖率。
致谢
工作的很大一部分基于Graylin Kim在sc2reader
中的Python位/字节读取器。
.. _sc2reader: https://github.com/GraylinKim/sc2reader