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() - 从二进制字符串解包数据