PHP 杂项函数

PHP pack() 函数根据格式将数据打包成二进制字符串。

思路因为此函数取自 Perl,所有格式化代码的工作方式与 Perl 中相同。但是,缺少一些格式代码,例如 Perl 的"u"格式代码。

注意:有符号值和无符号值之间的区别仅影响函数 unpack(),其中函数 pack() 对于有符号和无符号格式代码给出相同的结果。

语法

pack(format, values) 

参数

format必填。 指定格式字符串由格式代码组成,后跟可选的重复器参数。 Repeater 参数可以是整数值或 *,用于重复到输入数据的末尾。重复计数指定以下内容:
  • 对于 a、A、h、H,它指定一个数据参数的字符数
  • 对于 @,它是放置数据的绝对位置下一个数据,
  • 对于其他所有内容,它指定使用多少数据参数并将其打包到生成的二进制字符串中。
当前实现的格式如下表所示:
value必填。 指定需要打包的数据。允许使用多个参数。

pack() 格式字符

代码描述
aNUL 填充字符串
A空格填充字符串
h十六进制字符串,低半字节在前
H十六进制字符串,高半字节在前
c有符号char
C无符号字符
s有符号短 (始终为 16 位,机器字节顺序)
S无符号短整型(始终为 16 位,机器字节顺序)
n无符号短整型(始终为 16 位,大端字节顺序)
v无符号短整型 (始终为 16 位,小端字节顺序)
i有符号整数(取决于机器的大小和字节顺序)
I无符号整数(取决于机器的大小和字节顺序)
l有符号长整型(始终为 32位,机器字节顺序)
Lunsigned long(始终为 32 位,机器字节顺序)
N无符号长整型(始终为 32 位,大端字节顺序)
V无符号长整型(始终为 32 位)位,小端字节顺序)
qsigned long long(始终为 64 位,机器字节顺序)
Qunsigned long long(始终为 64 位,机器字节顺序)
Junsigned long long (始终为 64 位,大端字节顺序)
Punsigned long long (始终为 64 位,小端字节顺序)
ffloat(取决于机器的大小和表示)
gfloat(机器依赖大小,小端字节顺序)
Gfloat(机器依赖大小,大端字节顺序)
ddouble(取决于机器的大小和表示)
edouble(取决于机器的大小,小) endian 字节顺序)
Edouble(机器相关大小,大 endian 字节顺序)
xNUL字节
X备份一个字节
ZNUL 填充字符串
@NUL 填充到绝对位置

返回值

返回包含数据的二进制字符串,失败时返回 false。

示例:pack() 示例

下面的示例显示了 pack() 函数的用法。

<?php
echo pack("C3",80,72,80);
?> 

上述代码的输出将是:

PHP 

示例:另一个 pack() 示例

再考虑一个讨论此函数用法的示例。

<?php
$binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66);
?> 

生成的二进制字符串将有 6 个字节长,并包含字节序列 0x12, 0x34、0x78、0x56、0x41、0x42。