erickmajor/binary-parser

Binary Parser 是一个在PHP中序列化和反序列化二进制数据的库。

资助包维护!
Ko Fi

v0.0.2 2020-05-19 02:06 UTC

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" 次