PHP打包功能

时间:2019-10-26 04:43:50

标签: php pack unpack

当我运行类似pack('N', "123455")或'N'选项的任何变体时,总是得到一个返回的字符。上面的示例返回�?

我正在尝试使用 Clamd 并将其流式传输到套接字,它需要“按网络字节顺序的4字节无符号整数”。我根本无法正常工作。

1 个答案:

答案 0 :(得分:1)

回送二进制数据几乎总是会输出类似的内容。二进制数据并不意味着人类可以阅读和理解。

$binary = pack('N', "123455");
$hex = bin2hex($binary);
echo $hex;
// 0001e23f

您的pack()调用正确地返回二进制数据00 01 e2 3f,它是数字123455的4字节大尾数表示。对于数字,您可以通过将数字转换为十六进制( echo dechex(123455); => 1e23f),并在前面加上零,直到达到4个字节(8个十六进制字符,0001e23f)为止。

回显二进制数据将使PHP将其视为字符串,以00 01e2 3f作为字符。 0x0001是控制字符(呈现为“ ...”),0xe23f不作为预定义字符存在(它属于Unicode标准的“专用区域”),因此它将呈现为“?”。 “。