我有:
$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。我做错了什么?
答案 0 :(得分:3)
pack()
无法获取单个数组参数。您需要将数组解压缩到其他参数中。
您可以改用以下内容:
$packed = call_user_func_array("pack", array_merge(array("C*"), $my_a));
这将基本上将打包参数与您的数据数组合并,函数call_user_func_array()
将使用从给定数组中提取的所有参数调用pack()
,作为单个参数,如需要。
或者,如果您正在使用PHP 5.6 +
,请使用splat运算符$packed = pack('C*', ...$my_a);
从手册中:当使用...运算符调用函数时,可以将数组和可遍历对象解压缩到参数列表中。这也称为其他语言的splat运算符,包括Ruby。
所以数组被解压缩成单个参数,就像pack()
需要它一样。
答案 1 :(得分:2)
您无法发送数组以进行打包。使用splat
运算符$bin_data = pack("C*", ...$my_a);
关于splat
...
:http://php.net/manual/en/migration56.new-features.php#migration56.new-features.splat