我有一个字节数组,我想映射到它们的ASCII等价物。
我该怎么做?
答案 0 :(得分:72)
如果你的意思是字节数组:
$bytes = array(255, 0, 55, 42, 17, );
然后它就像:
一样简单$string = implode(array_map("chr", $bytes));
以下是紧凑版:
$string = "";
foreach ($bytes as $chr) {
$string .= chr($chr);
}
// Might be a bit speedier due to not constructing a temporary array.
但最明智的选择可能是使用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开始,您可以通过...
$str = pack('C*', ...$bytes);
其他功能可以使用,但最好有可读代码。
答案 2 :(得分:2)
另一种方式:
$str = vsprintf(str_repeat('%c', count($bytes)), $bytes);
乌拉!
答案 3 :(得分:1)
Mario有already provided the best fit,但这是实现这一目标的更具异国情调的方法。
$str = call_user_func_array(
'sprintf',
array_merge((array) str_repeat('%c', count($bytes)), $bytes)
);
答案 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