PHP unpack() 函数

定义和用法

unpack() 函数从二进制字符串中解包数据。

实例

例子 1

从二进制字符串中解包数据:

<?php
$data = "PHP";
print_r(unpack("C*",$data));
?>

亲自试一试

例子 2

解包数据:

<?php
$data = "PHP";
print_r(unpack("C*myint",$data));
?>

亲自试一试

例子 3

解包数据:

<?php
$bin = pack("c2n2",0x1234,0x5678,65,66);
print_r(unpack("c2chars/n2int",$bin));
?>

亲自试一试

语法

unpack(format,dataoffset)
参数 描述
format 必需。指定解包数据时使用的格式。
data 可选。指定要解包的二进制数据。
offset 可选。指定从哪里开始解包。默认是 0。

format 参数的可能值:

  • a - NUL-padded 字符串
  • A - SPACE-padded 字符串
  • h - Hex 字符串,低半字节在前
  • H - Hex 字符串,高半字节在前
  • 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-padded 字符串
  • @ - NUL-fill 到绝对位置

技术细节

返回值: 成功时返回数组,失败时返回 FALSE。
PHP 版本: 4+
PHP 更新日志:

PHP 7.2 - float 和 double 现在支持大端和小端。

PHP 7.1 - 添加了可选的 offset 参数。

PHP 5.5.0 - 为了与 Perl 兼容,进行了以下更改:

  • "a" 代码现在保留尾部的 NULL 字节。
  • "A" 代码现在去除所有尾部的 ASCII 空白。
  • "Z" 代码被添加用于 NULL-padded 字符串,并去除尾部的 NULL 字节。