tahaghafuri / php-binary-reader
PHP轻量级二进制读取器
Requires
- php: *
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-28 03:50:35 UTC
README
在使用类之前添加这些代码
use PhpBinaryReader\BinaryReader; use PhpBinaryReader\Endian; ...
为什么?
如果你没有遇到需要利用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() 返回一个单字节8位无符号整数
readInt8() 返回一个单字节8位有符号整数
readUInt16() 返回一个16位短整型无符号整数
readInt16() 返回一个16位短整型有符号整数
readUInt32() 返回一个32位无符号整数
readInt32() 返回一个32位有符号整数
readUInt64() 返回一个64位无符号整数
readInt64() 返回一个64位有符号整数
readSingle() 返回一个4字节浮点数
readDouble() 返回一个8字节有符号双精度浮点数
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