【问题标题】:Reverting unpack('C*', "string")还原 unpack('C*', "string")
【发布时间】:2013-08-23 19:12:29
【问题描述】:

我想知道如何反转下面的unpack 函数执行的操作。我认为pack 函数能够反转unpack 执行的操作,但我不确定。

首先我有一个简单的字符串,解压后我会有一个字节数组来表示这样的字符串。现在我想知道如何将这样的数组反转回原始字符串。

<?php
$array = unpack('C*', "odd string");
/*Output: Array
(
    [1] => 111
    [2] => 100
    [3] => 100
    [4] => 32
    [5] => 115
    [6] => 116
    [7] => 114
    [8] => 105
    [9] => 110
    [10] => 103
)*/

$string = pack("which format here?", $array);

echo $string;
#Desired Output: odd string
?>

谢谢。

【问题讨论】:

    标签: php pack unpack


    【解决方案1】:

    您应该使用call_user_func_array 来还原unpack('C*', “string”),如下所示:

    call_user_func_array('pack', array_merge(array('C*'), $array )))
    

    【讨论】:

    • 我见过 call_user_func_array() 进行打包和解包,但再也记不起了。谢谢。
    • 能否请您根据unpack 函数而非array_merge 阐明解决方案?
    • @Jacobian 哦,我明白了它是如何工作的 那么你是否还在寻找新的答案,因为你是否投入了赏金?
    • @Rizier123。我得等24小时。在我接受答案之前
    【解决方案2】:

    当您使用 PHP 5.6 时,您应该考虑使用 argument unpacking,因为它比使用 call_user_func_array 快大约 4 到 5 倍:

    pack('C*', ...$array);
    

    当你使用 PHP 5.5 或更低版本时,你应该考虑使用ReflectionFunction,它似乎比call_user_func_array 快一点:

    $packFunction = new ReflectionFunction('pack');
    $packFunction->invokeArgs(array_merge(array('C*'), $array));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 2011-12-02
      • 2012-05-17
      • 1970-01-01
      相关资源
      最近更新 更多