erickmajor / binary-parser
Binary Parser 是一个在PHP中序列化和反序列化二进制数据的库。
Requires
- php: >=5.6.0
Requires (Dev)
- behat/behat: ^3.6@dev
- phpunit/phpunit: ^5
This package is auto-updated.
Last update: 2024-09-21 21:01:43 UTC
README
在PHP中序列化和反序列化二进制数据。
常量
- NOT_A_NUMBER: 定义了一种浮点错误标志,它根本不是数字
- POSITIVE_INFINITY: 定义了一个大于允许的最大值的正数
- NEGATIVE_INFINITY: 定义了一个小于允许的最小值的负数
类
BinaryParser: 二进制编码/解码器
属性
- public bigEndian: bool = false => 指定类将使用的解码/编码的字节序
- public constructor( bigEndian: bool = false ) => 可以接收端序类型
方法
-
public function toFloat( data: string ): float => 接收包含4个字符/字节的字符串,并返回其相应的浮点数表示或特殊值(NOT_A_NUMBER,POSITIVE_INFINITY,NEGATIVE_INFINITY)
-
public function fromFloat( data: float ): string => 接收一个浮点数并返回其4个字符字符串的二元表示,如果数字是特殊值(NOT_A_NUMBER,POSITIVE_INFINITY,NEGATIVE_INFINITY)或无法表示(溢出,下溢),则可能引发异常
-
public function toDouble( data: string ): float => 接收包含8个字符/字节的字符串并返回其相应的双精度浮点数表示或特殊值(NOT_A_NUMBER,POSITIVE_INFINITY,NEGATIVE_INFINITY)
-
public function fromDouble( data: float ): string => 接收一个浮点数并返回其8个字符字符串的二元表示,如果数字是特殊值(NOT_A_NUMBER,POSITIVE_INFINITY,NEGATIVE_INFINITY)或无法表示(溢出,下溢),则可能引发异常
-
public function toSmall( data: string ): int => 接收包含1个字符/字节的字符串并返回相应的带符号的数值表示
-
public function fromSmall( data: int ): string => 接收一个数字并返回其1个字符字符串的二元表示,如果数字超过限制,则可能引发异常
-
public function toByte( data: string ): int => 接收包含1个字符/字节的字符串并返回其相应的无符号数值表示
-
public function fromByte( data: int ): string => 接收一个数字并返回其1个字符字符串的二元表示,如果数字超过限制,则可能引发异常,并且负数会被转换
-
public function toShort( data: string ): int => 接收包含2个字符/字节的字符串并返回相应的带符号的数值表示
-
public function fromShort( data: int ): string => 接收一个数字并返回其2个字符字符串的二元表示,如果数字超过限制,则可能引发异常
-
public function toWord( data: string ): int => 接收包含2个字符/字节的字符串并返回相应的无符号数值表示
-
public function fromWord( data: int ): string => 接收一个数字并返回其2个字符字符串的二元表示,如果数字超过限制,则可能引发异常,并且负数会被转换
-
public function toInt( data: string ): int => 接收包含4个字符/字节的字符串并返回相应的带符号的数值表示
-
public function fromInt( data: int ): string => 接收一个数字并返回其4个字符字符串的二元表示,如果数字超过限制,则可能引发异常
-
public function toDWord( data: string ): int => 接收包含4个字符/字节的字符串并返回相应的无符号数值表示
-
public function fromDWord( data: int ): string => 接收一个数字并返回其4个字符长度的二进制表示,如果数字超过限制或为负数,则可能抛出异常
-
protected function decodeFloat( data: string, precisionBits: int, exponentBits: int ): float => 内部函数,用于解码标准IEEE-754格式,由于PHP无法处理超过64位的浮点数类型,因此我决定不支持80位和128位格式。
data: 包含数字二进制表示的字符串缓冲区(必须至少有 "ceil( ( exponentBits + precisionBits + 1 ) / 8 )" 字节)
precisionBits: 指定精度/尾数的位数
exponentBits: 指定指数的位数,该指数将乘以尾数以获得数字,并返回数字或以下特殊值:NaN、+Infinity、-Infinity -
protected function decodeInt( data: string, bits: int, signed: bool ): int => 内部函数用于解码标准整数类型,由于PHP无法处理超过32位的整数,因此我决定不支持64位格式。
data: 包含数字二进制表示的字符串缓冲区(必须至少有 "ceil( bits / 8 )" 字节) -
bits: 指定数字的最大长度和最小长度
signed: 如果数字必须以有符号或无符号方式解码并返回数字
precisionBits: 指定精度/尾数的位数
protected function encodeFloat( data: float, precisionBits: int, exponentBits: int ): string => 内部函数,用于将数字编码为标准IEEE-754格式,由于PHP无法处理超过64位的浮点数类型,因此我决定不支持80位和128位格式。 -
data: 将要转换的数字
signed: 如果数字必须以有符号或无符号方式解码并返回数字
exponentBits: 指定乘以尾数的指数的位数,以获得数字,并返回一个包含 "ceil( ( exponentBits + precisionBits + 1 ) / 8 )" 字节的二进制字符串表示的数字
protected function encodeInt( data: string, bits: int, signed: bool ): int => 内部函数用于解码标准整数类型,由于PHP无法处理超过32位的整数,因此我决定不支持64位格式。
BinaryBuffer
简单的类,用于在将数据解码为数值格式时暂存一些字节
属性
- public length: int = 0 => 类中存储的字节数量
- private bigEndian: bool = false => 保存选择内部端序格式
- private buffer: array = [] => 缓冲区存储,用于存储字节
方法
- public constructor( bigEndian: bool = false, buffer: string = '' ): void => 可能接收排序类型和起始字符串缓冲区
- public function setBuffer( data: string ): void => 将新内容设置到缓冲区数组中
- public function getBuffer(): array => 返回缓冲区数组
- public function hasNeededBits( neededBits: int ): bool => 返回缓冲区是否有 "neededBits" 位可供读取
- public function checkBuffer( $neededBits ): void => 与 BinaryBuffer::hasNeededBits 相同,但如果数据不足,则抛出异常
- public function byte( $i ): int => 返回缓冲区在指定 "i" 偏移处的字节值
- public function setEndian( $bigEndian ): void => 设置端序
- public function readBits( $start, $length ): int => 读取位间隔并返回相应的整数值
- private private function shl( a: Int, b: Int ): int => 将 "a" 位向左旋转 "b" 次