2016-08-31 116 views
0

我:PHP ByteArray的二进制数据

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

回答

3

pack()不能采取单一阵列中的说法,很遗憾。您需要将数组解包到其他参数中。

,您可以改用以下内容:

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

这将基本上合并包装参数与您的数据阵列和功能call_user_func_array()将调用pack()与给定数组中提取的所有参数,如单个参数,像需要。

或可替换地,如果你使用PHP 5.6+

$packed = pack('C*', ...$my_a); 

从说明书使用图示操作:数组和对象Traversable的调用可以通过使用...操作功能时,可以解压到参数列表。这也被称为其他语言中的splat操作符,包括Ruby。

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

+0

该死的,我现在搜索这个答案几个小时................. *讨厌*自豪地问我想。多谢你们! –