是否可以用一个0-9a-zA-Z字符表示一个十六进制字符(0-9A-F)序列,所以结果序列较小并且可以解码?
例如:
$hex = '5d41402abc4b2a76b9719d911017c592';
echo $string = encode($hex); // someASCIIletters123
echo decode(string) == $hex; //true
我认为您正在寻找这个:
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)
您的意思是要将一串十六进制数字转换为实际的十六进制值?
$hex_string = "A1B2C3D4F5"; // 10 chars/bytes
$packed_string = pack('H*', $hex_string); // 0xA1B2C3D4F5 // 5 chars/bytes.
嗯,有点类似,是的...将十六进制字符解析为二进制值,然后转换为base64。它使用little位多于0-9 a-z A-Z,但仅使用几个字符。除了62个字符以外,您还可以使用其他三个字符吗?您可以使用base64_encode
进行编码。
((您可以转换为base32,但这并不是那么紧凑。转换为不是2的幂的基数也是可行的,但吸引力较小。)
如果输入序列的字符数为奇数,则还需要某种方式来表示最后一个半字节。在调用base64_encode
进行原始解析之前,您可能需要考虑一下...
内置的php函数可能会帮助您进行一些搜索:
pack