$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。我究竟做错了什么?
$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。我究竟做错了什么?
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()
所需的那样。
无法发送阵列进行打包。 Do it right与splat
操作$bin_data = pack("C*", ...$my_a);
关于splat
...
:http://php.net/manual/en/migration56.new-features.php#migration56.new-features.splat
该死的,我现在搜索这个答案几个小时................. *讨厌*自豪地问我想。多谢你们! –