是否可以用0-9a-zA-Z字符序列表示十六进制字符序列(0-9A-F),因此结果序列更小并且可以解码?
例如:
$hex = '5d41402abc4b2a76b9719d911017c592';
echo $string = encode($hex); // someASCIIletters123
echo decode(string) == $hex; //true
答案 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}}