Преобразование hex-кода ASCII в ASCII-строку на Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы преобразовать шестнадцатеричную строку в ASCII, сделайте следующее:

Python
Скопировать код
ascii_str = bytes.fromhex("68656c6c6f").decode()  # преобразуем '68656c6c6f' в 'hello'

Используйте bytes.fromhex(), а потом .decode() на шестнадцатеричной строке для получения нужного результата.

Кинга Идем в IT: пошаговый план для смены профессии

Понимание кодировок символов

ASCII и Unicode — это системы кодирования символов с помощью числовых кодов. Шестнадцатеричное представление символа ASCII соответствует одному байту, то есть двум шестнадцатеричным цифрам, например, 68 для символа h.

Методы преобразования Hex в ASCII

Использование модуля binascii

В качестве альтернативы bytes.fromhex() можно использовать функцию binascii.unhexlify():

Python
Скопировать код
import binascii
ascii_str = binascii.unhexlify("68656c6c6f").decode('ascii')  # переводим hex '68656c6c6f' в 'hello'

Ручное преобразование hex в целочисленное значение

Любителям сделать всё своими руками предлагается такой способ конвертирования шестнадцатеричных значений в символы ASCII:

Python
Скопировать код
ascii_str = ''.join(chr(int(''.join(pair), 16)) for pair in zip(*[iter("68656c6c6f")] * 2))  # для чего нужны библиотеки?

Декодирование не-ASCII кодировок

Возможны случаи, когда встречаются символы за пределами ASCII. В таких ситуациях вот простой способ обработать их:

Python
Скопировать код
non_ascii = bytes.fromhex("e38182e38184e38186").decode('utf-8')  # переводим hex в японские символы 'あいう', демонстрируем полиглотство

Здесь мы явно декодируем в UTF-8, что позволяет обрабатывать многобайтные символы.

Избегание общих ошибок

Подготавливайте ваш шестнадцатеричный ввод

Важно убедиться, что в вашей шестнадцатеричной строке нет пробелов, префикса 0x, и что это действительно легитимные шестнадцатеричные цифры:

Python
Скопировать код
clean_hex = "68656C6C6F".replace(' ', '').lower().lstrip('0x')  # очищаем hex перед использованием
ascii_str = bytes.fromhex(clean_hex).decode('ascii')

Метод Python 2 устарел

Времена, когда в Python 2 использовался .decode('hex'), ушли в прошлое. Сейчас пора перейти на Python 3.

Визуализация

Иллюстрируем процесс декодирования шестнадцатеричной строки в ASCII:

Шестнадцатеричная строка (🔠🔡): "48656C6C6F"
Python
Скопировать код
decoded = bytes.fromhex("48656C6C6F").decode('ascii')  # Входим в шестнадцатеричные вода, выходим из аскишных!
Обычная строка ASCII (✉️): "Hello"

В итоге мы преобразовали мистический набор шестнадцатеричных цифр в привычное "Hello"!

Продвинутое преобразование hex

Для любителей функционального программирования

Функциональное программирование также предлагает инструменты для работы с Hex и ASCII:

Python
Скопировать код
from functools import partial
hex_to_int = partial(int, base=16)  # каждому hex – быть int!
ascii_str = ''.join(map(chr, map(hex_to_int, ("68", "65", "6c", "6c", "6f")))) # map() внесет весь ужин

Богатство стандартной библиотеки

Для решения ваших задач часто достаточно стандартной библиотеки Python, и нет необходимости обращаться к сторонним.

Читаемость – главный приоритет

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

Полезные материалы

  1. Документация Python | bytes.fromhex() – Как можно преобразовать hex в ASCII с помощью функции bytes.fromhex().
  2. Документация Python | binascii.unhexlify() – Альтернативные способы, позволяющие достичь таких же результатов с использованием binascii.unhexlify().
  3. Real Python | Всё о кодировке и декодировании – Глубокое погружение в мир кодировок и декодирования в Python.
  4. Практический Python | Использование метода decode() – Узнайте больше об искусстве использования метода decode() в Python.
  5. DigitalOcean | Строки и байты в Python – Разъяснение различий между строками и байтами в Python.
  6. Перекодировка в Python | Использование метода encode() – Руководство для тех, кто собирается использовать метод encode.