【问题标题】:PHP bytearray to binary dataPHP bytearray 到二进制数据
【发布时间】:2017-01-08 03:03:04
【问题描述】:

我有:

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

【问题讨论】:

    标签: php encryption binary pack unpack


    【解决方案1】:

    pack() 不能接受单个数组参数,很遗憾。您需要将数组解压缩为其他参数。

    如果您使用的是 PHP 5.6+,请使用 splat 运算符

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

    来自手册:当使用 ... 运算符调用函数时,可以将数组和 Traversable 对象解压缩到参数列表中。这在其他语言(包括 Ruby)中也称为 splat 运算符。

    所以数组被解压缩成单个参数,就像pack() 需要它一样。


    PHP 5.6 之前

    您可以改用以下内容:

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

    这基本上会将打包参数与您的数据数组合并,函数call_user_func_array() 将调用pack(),并将所有从给定数组中提取的参数作为单个参数,如需要。

    【讨论】:

    • 该死的,我已经搜索了几个小时的答案...... 烦人 很自豪地问我想。谢谢大家!
    【解决方案2】:

    您不能发送数组进行打包。使用 splat 操作符 $bin_data = pack("C*", ...$my_a); 正确操作

    关于splat...http://php.net/manual/en/migration56.new-features.php#migration56.new-features.splat

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多