将十六进制转换为ascii字符

时间:2011-09-20 16:30:02

标签: php encoding decoding

是否可以用0-9a-zA-Z字符序列表示十六进制字符序列(0-9A-F),因此结果序列更小并且可以解码?

例如:

$hex = '5d41402abc4b2a76b9719d911017c592';
echo $string = encode($hex); // someASCIIletters123
echo decode(string) == $hex; //true

5 个答案:

答案 0 :(得分:21)

我认为你正在寻找这个:

function hex2str($hex) {
    $str = '';
    for($i=0;$i<strlen($hex);$i+=2) $str .= chr(hexdec(substr($hex,$i,2)));
    return $str;
}

(来自http://www.linux-support.com/cms/php-convert-hex-strings-to-ascii-strings/) (像这个javascript工具一样工作:http://www.dolcevie.com/js/converter.html

答案 1 :(得分:15)

您的意思是想将十六进制数字的字符串转换为实际的十六进制值吗?

$hex_string = "A1B2C3D4F5"; // 10 chars/bytes
$packed_string = pack('H*', $hex_string); // 0xA1B2C3D4F5 // 5 chars/bytes.

答案 2 :(得分:6)

您可以使用函数base_convert_arbitrary轻松调整我提供的解决方案here

编辑:我没有仔细阅读:)如上所述,基地16到基地62仍然非常可行。

<强> See it in action

答案 3 :(得分:2)

嗯,类似,是的...将十六进制字符解析为二进制值,然后转换为base64。它使用 little 位超过0-9 a-z A-Z,但只有几个字符。除了那些62之外你还可以使用其他三个角色吗?如果是,您可以使用base64_encode执行编码。

(你可以改为转换为base32,但这不会那么紧凑。转换为不是2的幂的基数也是可行的,但不太吸引人。)

如果您的输入序列具有奇数个字符,您还需要某种方式来表示最后的半字节。在调用pack进行原始解析之前,您可能想要考虑一下......

答案 4 :(得分:0)

内置的php函数可以帮助您进行一些搜索:

{{1}}