当我运行类似pack('N', "123455")
或'N'选项的任何变体时,总是得到一个返回的字符。上面的示例返回�?
。
我正在尝试使用 Clamd 并将其流式传输到套接字,它需要“按网络字节顺序的4字节无符号整数”。我根本无法正常工作。
答案 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 01
和e2 3f
作为字符。 0x0001
是控制字符(呈现为“ ...”),0xe23f
不作为预定义字符存在(它属于Unicode标准的“专用区域”),因此它将呈现为“?”。 “。