7

我想知道如何扭转下面这个解包函数的执行情况。我认为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
?>

谢谢你。

4

2 回答 2

12

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

call_user_func_array('pack', array_merge(array('C*'), $array )))
于 2013-08-21T12:22:43.820 回答
5

当您使用 PHP 5.6 时,您应该考虑使用参数解包,因为它比使用快 4 到 5 倍call_user_func_array

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

当您使用 PHP 5.5 或更低版本时,您应该考虑使用ReflectionFunction,这似乎比call_user_func_array

$packFunction = new ReflectionFunction('pack');
$packFunction->invokeArgs(array_merge(array('C*'), $array));
于 2015-06-12T08:24:08.483 回答