PHP pack() 函数根据格式将数据打包成二进制字符串。
思路因为此函数取自 Perl,所有格式化代码的工作方式与 Perl 中相同。但是,缺少一些格式代码,例如 Perl 的"u"格式代码。
注意:有符号值和无符号值之间的区别仅影响函数 unpack(),其中函数 pack() 对于有符号和无符号格式代码给出相同的结果。
语法
pack(format, values)
参数
format | 必填。 指定格式字符串由格式代码组成,后跟可选的重复器参数。 Repeater 参数可以是整数值或 *,用于重复到输入数据的末尾。重复计数指定以下内容:
|
value | 必填。 指定需要打包的数据。允许使用多个参数。 |
pack() 格式字符
代码 | 描述 |
---|---|
a | NUL 填充字符串 |
A | 空格填充字符串 |
h | 十六进制字符串,低半字节在前 |
H | 十六进制字符串,高半字节在前 |
c | 有符号char |
C | 无符号字符 |
s | 有符号短 (始终为 16 位,机器字节顺序) |
S | 无符号短整型(始终为 16 位,机器字节顺序) |
n | 无符号短整型(始终为 16 位,大端字节顺序) |
v | 无符号短整型 (始终为 16 位,小端字节顺序) |
i | 有符号整数(取决于机器的大小和字节顺序) |
I | 无符号整数(取决于机器的大小和字节顺序) |
l | 有符号长整型(始终为 32位,机器字节顺序) |
L | unsigned long(始终为 32 位,机器字节顺序) |
N | 无符号长整型(始终为 32 位,大端字节顺序) |
V | 无符号长整型(始终为 32 位)位,小端字节顺序) |
q | signed long long(始终为 64 位,机器字节顺序) |
Q | unsigned long long(始终为 64 位,机器字节顺序) |
J | unsigned long long (始终为 64 位,大端字节顺序) |
P | unsigned long long (始终为 64 位,小端字节顺序) |
f | float(取决于机器的大小和表示) |
g | float(机器依赖大小,小端字节顺序) |
G | float(机器依赖大小,大端字节顺序) |
d | double(取决于机器的大小和表示) |
e | double(取决于机器的大小,小) endian 字节顺序) |
E | double(机器相关大小,大 endian 字节顺序) |
x | NUL字节 |
X | 备份一个字节 |
Z | NUL 填充字符串 |
@ | 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。