PHP pack 杂项函数

  • 定义和用法

    pack - 将数据打包成二进制字符串
    请注意,PHP在内部将整数值存储为与机器相关的大小(C型长)的有符号值。整数文字和产生超出整数类型范围的数字的运算将存储为float。将这些浮点数打包为整数时,首先将它们转换为整数类型。这可能会或可能不会导致所需的字节模式。最相关的情况是打包无符号的数字,如果无符号的数字可以用整数类型表示。在整数类型具有32位大小的系统中,强制转换通常会产生相同的字节模式,就好像整数是无符号的(尽管这依赖于实现定义的无符号到有符号的转换,按照C标准)。在整数类型具有64位大小的系统中,浮点数很可能没有足够大的尾数来容纳该值而又不损失精度。如果这些系统也具有本机64位C int类型(大多数类似UNIX的系统则没有),则在较高范围内使用I pack格式的唯一方法是创建整数负值,该负值具有与所需的无符号值。
  • 版本支持

    PHP4 PHP5 PHP7
    支持 支持 支持
    7.2.0 float 和 double 类型支持打断和小端。
    7.0.15,7.1.1 添加了"e","E","g"和"G"代码以启用float和double的字节顺序支持。
    5.6.3 添加了“q”、“q”、“J”和“P”代码以支持处理64位数字。
    5.5.0 “Z”代码添加了与“a”等效的功能,以实现Perl兼容性。
  • 语法

    pack( string $format [, mixed $args [, mixed $... ]] )
    pack() 根据format将给地的参数打包成二进制字符串。 这个函数的思想来自Perl,所有格式化代码(format)的工作原理都与Perl相同。 但是,缺少了部分格式代码,比如Perl的“u”。注意,有符号值和无符号值之间的区别只影响函数 unpack(), 在那些使用有符号和无符号格式代码的地方pack()函数产生相同的结果。
  • 参数

    参数 必需的 描述
    format format字符串由格式代码组成,后面跟着一个可选的重复参数。 重复参数可以是一个整数值或者*值来重复到输入数据的末尾。对于a, A, h, H格式化代码,其后的重复参数指定了给定数据将会被使用几个字符串,对于@,其后的数字表示放置剩余数据的绝对定位(之前的数据将会被空字符串填充),对于其他所有内容,重复数量指定消耗多少数据并将其打包到生成的二进制字符串中。 目前已实现的格式如下:
    • a 以NUL字节填充字符串
    • A 以SPACE(空格)填充字符串
    • h 十六进制字符串,低位在前
    • H 十六进制字符串,高位在前
    • c 有符号字符
    • C 无符号字符
    • s 有符号短整型(16位,主机字节序)
    • S 无符号短整型(16位,主机字节序)
    • n 无符号短整型(16位,大端字节序)
    • v 无符号短整型(16位,小端字节序)
    • i 有符号整型(机器相关大小字节序)
    • I 无符号整型(机器相关大小字节序)
    • l 有符号长整型(32位,主机字节序)
    • L 无符号长整型(32位,主机字节序)
    • N 无符号长整型(32位,大端字节序)
    • V 无符号长整型(32位,小端字节序)
    • q 有符号长长整型(64位,主机字节序)
    • Q 无符号长长整型(64位,主机字节序)
    • J 无符号长长整型(64位,大端字节序)
    • P 无符号长长整型(64位,小端字节序)
    • f 单精度浮点型(机器相关大小)
    • g 单精度浮点型(机器相关大小,小端字节序)
    • G 单精度浮点型(机器相关大小,大端字节序)
    • d 双精度浮点型(机器相关大小)
    • e 双精度浮点型(机器相关大小,小端字节序)
    • E 双精度浮点型(机器相关大小,大端字节序)
    • x NUL字节
    • X 回退已字节
    • Z 以NUL字节填充字符串空白(PHP 5.5中新加入的)
    • @ NUL填充到绝对位置
    args 参数
    ... 更多参数
  • 返回值

    返回包含数据的二进制字符串。
  • 示例

    生成的二进制字符串将为6个字节长,并包含字节序列0x12、0x34、0x78、0x56、0x41、0x42。
    $binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66);
  • 相关页面

    unpack() - 从二进制字符串解包数据