将十六进制转换为ASCII字符

问题描述 投票:12回答:5

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

例如:

$hex = '5d41402abc4b2a76b9719d911017c592';
echo $string = encode($hex); // someASCIIletters123
echo decode(string) == $hex; //true
php encoding decoding
5个回答
6
投票

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

编辑:我没有足够仔细地阅读:)如上所述,以16为基础的基础仍然非常可行。

See it in action


24
投票

我认为您正在寻找这个:

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


17
投票

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

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

1
投票

嗯,有点类似,是的...将十六进制字符解析为二进制值,然后转换为base64。它使用little位多于0-9 a-z A-Z,但仅使用几个字符。除了62个字符以外,您还可以使用其他三个字符吗?您可以使用base64_encode进行编码。

((您可以转换为base32,但这并不是那么紧凑。转换为不是2的幂的基数也是可行的,但吸引力较小。)

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


0
投票

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

pack
© www.soinside.com 2019 - 2024. All rights reserved.