PHP 字节数组转二进制数据

PHP bytearray to binary data

我有:

$my_a = array(100, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

这是一个字节数组,我想将其转换为二进制数据以用于加密。我做的是:

$bin_data         = pack("C*", $my_a);

为了验证这是否正确,我通过以下方式反转它:

unpack("C*", $bin_data);

问题是,我再也找不回 byte_array。我做错了什么?

您不能发送数组进行打包。用 splat 运算符 $bin_data = pack("C*", ...$my_a);

做对

关于 splat ...: http://php.net/manual/en/migration56.new-features.php#migration56.new-features.splat

不幸的是,

pack() 不能接受单个数组参数。您需要将数组解压缩为其他参数。

如果您使用 PHP 5.6+

,请使用 splat 运算符
$packed = pack('C*', ...$my_a);

来自手册:使用 ... 运算符调用函数时,可以将数组和 Traversable 对象解压缩到参数列表中。这在其他语言中也称为 splat 运算符,包括 Ruby.

所以数组被解压缩为单个参数,就像 pack() 所需要的那样。


之前 PHP 5.6

您可以改用以下内容:

$packed = call_user_func_array("pack", array_merge(array("C*"), $my_a));

这基本上会将打包参数与您的数据数组合并,并且函数 call_user_func_array() 将使用从给定数组中提取的所有参数调用 pack(),如需要,作为单个参数。