反转 unpack('C*', "string")

7
我想知道如何撤销下面的解包函数的操作。我认为打包函数能够撤销解包函数的操作,但我不确定。
首先,我有一个简单的字符串,解包后我将得到表示该字符串的字节数组。现在我想知道如何将这样的数组反转回原始字符串。
<?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
?>

谢谢。
2个回答

12

您应该使用call_user_func_array来还原unpack('C*', “string”),像这样:

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

我曾经见过call_user_func_array()用于打包和解包,但是后来就忘记了。谢谢。 - Fábio Antunes
请您能否明确解决方案中 unpack 函数的含义,而不是使用 array_merge - Jacobian
@Jacobian 哦,我明白它是如何工作的 那么你是否还在寻找新的答案,因为你已经设置了悬赏呢? - Rizier123
@ Rizier123。我需要等待24小时才能接受答案。 - Jacobian

5

当你使用 PHP 5.6 时,应该考虑使用参数解包,因为它比使用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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接