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()
,如需要,作为单个参数。
我有:
$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()
,如需要,作为单个参数。