mdurrant/php-binary-reader

PHP的二进制读取器,轻量级

1.0.9 2016-12-08 01:24 UTC

This package is auto-updated.

Last update: 2024-09-05 08:03:17 UTC


README

Build Status Code Coverage Scrutinizer Code Quality

为什么?

如果你没有遇到需要利用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