Конвертация байт в шестнадцатеричную строку в Python 3
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для преобразования байтового массива в шестнадцатеричное представление в Python 3 используйте метод bytes.hex()
:
hex_string = b'example'.hex()
print(hex_string) # Вывод: 6578616d706c65
Если предпочитаете формировать строку вручную, воспользуйтесь следующим способом:
hex_string = ''.join(f'{byte:02x}' for byte in b'example')
print(hex_string) # Вывод: 6578616d706c65
Оба эти варианта позволяют получить шестнадцатеричную строку непосредственно из байтовой последовательности.
Продвинутые методы и примеры их применения
Встретились с устаревшим кодом?
Если в старых версиях кода не поддерживается метод bytes.hex()
, необходимо применить binascii.hexlify()
:
import binascii
hex_string = binascii.hexlify(b'example').decode('ascii')
print(hex_string) # Вывод: 6578616d706c65
Зачем здесь decode
? binascii.hexlify()
возвращает байтовую последовательность, которую обязательно нужно декодировать в строку.
Модуль codecs
— важный инструмент
Модуль codecs
также предлагает функционал для преобразования байт в шестнадцатеричное представление:
import codecs
hex_string = codecs.encode(b'example', 'hex_codec').decode()
print(hex_string) # Вывод: 6578616d706c65
Стилистика вывода
Starting with Python 3.8, separators can be added when converting using bytes.hex()
:
fancy_hex_string = b'example'.hex(':')
print(fancy_hex_string) # Вывод: 65:78:61:6d:70:6c:65
Вы можете использовать двоеточия или любые другие знаки препинания для стилизации вашего вывода.
Визуализация
Процесс может быть изображён следующим образом:
Исходные байты: b'\xf0\xf1\xf2'
# Конвертируем байты в шестнадцатеричную строку
hex_string = b'\xf0\xf1\xf2'.hex()
И результат будет таким:
String Hex: 'f0f1f2'
Каждый байт преобразуется в соответствующее ему шестнадцатеричное представление.
Остановка на деталях: Другие способы преобразования
Байты в аналогичные форматы
Для множества задач полезны и другие форматы преобразования, например, base64 или zlib:
- Используйте base64 для сохранения данных в URL или татуировках.
- А zlib будет полезен для сжатия данных.
Прежде чем конвертировать, не забудьте закодировать строки
Для преобразования строк в шестнадцатеричный формат сначала необходимо конвертировать их в байты:
string = 'trip'
byte_data = string.encode('utf-8')
hex_string = binascii.hexlify(byte_data).decode('ascii')
Возможные трудности
- Размер шестнадцатеричной строки всегда в два раза больше, чем размер соответствующего байтового массива.
- При использовании
binascii.hexlify()
для декодирования в строку важно выбрать подходящую кодировку —'ascii'
будет надежным решением. - В Python 3 метод
bytes.encode('hex')
более не используется и вызовет ошибку.
Полезные материалы
- Встроенные типы — Документация Python 3.12.1 — Описание использования
str.format()
для форматирования строк. - binascii — Преобразование между бинарным и ASCII форматами — Документация Python 3.12.1 — Описывается
binascii.hexlify()
для преобразования данных в ASCII. - Встроенные типы — Документация Python 3.12.1 — Об особенностях работы метода
bytes.hex()
. - codecs — Реестр кодеков и базовые классы — Документация Python 3.12.1 — О возможностях кодирования данных с использованием модуля
codecs
. - PEP 358 – Объект типа "bytes" — Подробности о типе
bytes
и его использовании. - PyFormat: Как использовать % и .format() для форматирования — Подробное руководство по форматированию строк с использованием
str.format()
.