Возможно ли представлять последовательность шестнадцатеричных символов (0-9A-F) с последовательностью символов 0-9a-zA-Z, поэтому последовательность результатов меньше и может быть расшифрована?
Например:
$hex = '5d41402abc4b2a76b9719d911017c592'; echo $string = encode($hex); // someASCIIletters123 echo decode(string) == $hex; //true
Вы можете тривиально адаптировать решение, представленное здесь, с помощью функции base_convert_arbitrary
.
Редактировать: я не читал достаточно внимательно 🙂 Базовая 16 до базы 62 все еще очень выполнима, как указано выше.
Смотрите в действии .
Я думаю, вы ищете это:
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. Это использует немного больше, чем 0-9 az AZ, но всего несколько символов. Вы можете использовать еще три персонажа в дополнение к этим 62? Вы можете использовать base64_encode
для выполнения кодировки, если это так.
(Вместо этого вы можете преобразовать в base32, но это будет не так компактно. Преобразование в базы, которые не являются полномочиями 2, также возможно, но менее привлекательным.)
Вам также понадобится некоторый способ представления окончательного полубайта, если ваша последовательность ввода имела нечетное количество символов. Вероятно, вам захочется подумать об этом, прежде чем вызывать pack
чтобы выполнить оригинальный синтаксический анализ …