有人可以向我解释PHP中的pack()函数吗?

2022-08-30 11:43:48

我想了解更多关于PHP中的函数:https://secure.php.net/manual/en/function.pack.phppack()

我知道它将数据打包成二进制文件,但我不确定所有这些意味着什么,我想知道是否有人可以如此友善地给我一个实际的演示,何时使用哪种格式?v V n N c C

在我看来,在线文档对于更改缺乏信息。


答案 1

这些表示您希望以二进制格式表示要打包的数据的方式:

所以

$bin = pack("v", 1); => 0000000000000001(16位)

哪里

$bin = pack("V", 1) => 00000000000000000000000000000001(32 位)

它告诉包您希望数据在二进制数据中表示的方式。下面的代码将演示这一点。请注意,您可以使用与打包数据的格式不同的格式进行解压缩。

<?php

$bin = pack("S", 65535);
$ray = unpack("S", $bin);
echo "UNSIGNED SHORT VAL = ", $ray[1], "\n";

$bin = pack("S", 65536);
$ray = unpack("S", $bin);
echo "OVERFLOW USHORT VAL = ", $ray[1], "\n";

$bin = pack("V", 65536);
$ray = unpack("V", $bin);
echo "SAME AS ABOVE BUT WITH ULONG VAL = ", $ray[1], "\n";
?>

答案 2

如 php 文档 for pack 中所述,该函数是从 Perl 的 pack 函数中借用的。

看看Perl的包文档,特别是页面最底部的示例部分。PHP的包没有实现所有格式,但是Perl的函数文档在提供示例和解释每种格式方面做得更好。


推荐