Преобразование шестнадцатеричных символов в символы ascii - PullRequest
12 голосов
/ 20 сентября 2011

Можно ли представить последовательность шестнадцатеричных символов (0-9A-F) с последовательностью символов 0-9a-zA-Z, поэтому результирующая последовательность меньше и ее можно декодировать?

Например:

$hex = '5d41402abc4b2a76b9719d911017c592';
echo $string = encode($hex); // someASCIIletters123
echo decode(string) == $hex; //true

Ответы [ 4 ]

22 голосов
/ 23 января 2013

Я думаю, что вы ищете это:

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 голосов
/ 20 сентября 2011

Вы хотите преобразовать строку шестнадцатеричных цифр в фактические шестнадцатеричные значения?

$hex_string = "A1B2C3D4F5"; // 10 chars/bytes
$packed_string = pack('H*', $hex_string); // 0xA1B2C3D4F5 // 5 chars/bytes.
6 голосов
/ 20 сентября 2011

Вы можете легко адаптировать решение, которое я представил здесь , используя функцию base_convert_arbitrary.

Редактировать: Я недостаточно внимательно прочитал :) База 16 длябаза 62 все еще очень выполнима, как указано выше.

См. это в действии .

2 голосов
/ 20 сентября 2011

Ну, что-то похоже , да ... парсит шестнадцатеричные символы как двоичное значение, а затем преобразует в base64.При этом используется немного бит больше, чем 0-9 аз. Аз., Но только на несколько символов.Вы можете использовать три других символа в дополнение к этим 62?Вы можете использовать base64_encode для выполнения кодирования, если это так.

(Вместо этого вы можете конвертировать в base32, но это не будет так компактно. Преобразование в базы, которые не являются степенями2 также возможно, но менее привлекательно.)

Вам также понадобится какой-то способ представления конечного полубайта, если ваша входная последовательность содержит нечетное количество символов.Возможно, вы захотите подумать об этом, прежде чем позвонить pack, чтобы выполнить первоначальный анализ ...

...