16進文字のシーケンス(0-9A-F)を0-9a-zA-Z文字のシーケンスで表すことは可能ですか?その結果、結果のシーケンスはより小さくなり、デコードできますか?
例えば:
$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 )
16進数の文字列を実際の16進値に変換したいということですか?
$hex_string = "A1B2C3D4F5"; // 10 chars/bytes
$packed_string = pack('H*', $hex_string); // 0xA1B2C3D4F5 // 5 chars/bytes.
ええと、何かsimilar、はい... 16進文字をバイナリ値として解析してから、base64に変換します。これは、0-9 a-z A-Zより少し大きいlittleビットを使用しますが、それよりも数文字しか使用しません。 62文字に加えて他の3文字を使用しても大丈夫ですか? base64_encode
エンコードを実行する場合。
(代わりにbase32に変換することもできますが、それほどコンパクトではありません。2の累乗ではないベースに変換することも可能ですが、魅力的ではありません。)
入力シーケンスの文字数が奇数の場合は、最後のハーフバイトを表す何らかの方法も必要になります。 pack
を呼び出して元の解析を行う前に、そのことを検討することをお勧めします。