如何在PHP中将字节数组转换为字符串?

时间:2011-03-29 13:09:19

标签: php ascii

我有一个字节数组,我想映射到它们的ASCII等价物。

我该怎么做?

5 个答案:

答案 0 :(得分:72)

如果你的意思是字节数组:

$bytes = array(255, 0, 55, 42, 17,    );

array_map()

然后它就像:

一样简单
$string = implode(array_map("chr", $bytes));

的foreach()

以下是紧凑版:

$string = "";
foreach ($bytes as $chr) {
    $string .= chr($chr);
}
// Might be a bit speedier due to not constructing a temporary array.

pack()的

但最明智的选择可能是使用pack("C*", [$array...]),即使它需要在PHP中使用时髦的数组解决方法来传递整数列表:

$str = call_user_func_array("pack", array_merge(array("C*"), $bytes)));

如果您可能需要从字节 C * (对于ASCII字符串)切换到单词 S * (对于UCS2)或者甚至具有32位整数列表 L * (例如UCS4 Unicode字符串)。

答案 1 :(得分:4)

使用pack()修改马里奥的答案: 从PHP 5.5开始,您可以通过...

使用Argument解压缩
$str = pack('C*', ...$bytes);

其他功能可以使用,但最好有可读代码。

答案 2 :(得分:2)

另一种方式:

$str = vsprintf(str_repeat('%c', count($bytes)), $bytes);

乌拉!

答案 3 :(得分:1)

Marioalready provided the best fit,但这是实现这一目标的更具异国情调的方法。

$str = call_user_func_array(
        'sprintf',
        array_merge((array) str_repeat('%c', count($bytes)), $bytes)
       );

CodePad

答案 4 :(得分:0)

下面是将Yodlee MFA ByteArray转换为CAPTCHA图像的示例。希望它可以帮助某人...

您只需要将字节数组转换为字符串,然后编码为base64。

这是一个PHP示例:

$byteArray = $obj_response->fieldInfo->image; //Here you get the image from the API getMFAResponse

$string = implode(array_map("chr", $byteArray)); //Convert it to string

$base64 = base64_encode($string); //Encode to base64

$img = "<img src= 'data:image/jpeg;base64, $base64' />"; //Create the image

print($img); //Display the image