PHP bytearray到二进制数据

时间:2016-08-31 13:29:45

标签: php encryption binary pack unpack

我有:

$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。我做错了什么?

2 个答案:

答案 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