Конвертация байт в шестнадцатеричную строку в Python 3

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

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

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

Для преобразования байтового массива в шестнадцатеричное представление в Python 3 используйте метод bytes.hex():

Python
Скопировать код
hex_string = b'example'.hex()
print(hex_string)  # Вывод: 6578616d706c65

Если предпочитаете формировать строку вручную, воспользуйтесь следующим способом:

Python
Скопировать код
hex_string = ''.join(f'{byte:02x}' for byte in b'example')
print(hex_string)  # Вывод: 6578616d706c65

Оба эти варианта позволяют получить шестнадцатеричную строку непосредственно из байтовой последовательности.

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

Продвинутые методы и примеры их применения

Встретились с устаревшим кодом?

Если в старых версиях кода не поддерживается метод bytes.hex(), необходимо применить binascii.hexlify():

Python
Скопировать код
import binascii

hex_string = binascii.hexlify(b'example').decode('ascii')
print(hex_string)  # Вывод: 6578616d706c65

Зачем здесь decode? binascii.hexlify() возвращает байтовую последовательность, которую обязательно нужно декодировать в строку.

Модуль codecs — важный инструмент

Модуль codecs также предлагает функционал для преобразования байт в шестнадцатеричное представление:

Python
Скопировать код
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():

Python
Скопировать код
fancy_hex_string = b'example'.hex(':')
print(fancy_hex_string)  # Вывод: 65:78:61:6d:70:6c:65

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

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

Процесс может быть изображён следующим образом:

Markdown
Скопировать код
Исходные байты:  b'\xf0\xf1\xf2'
Python
Скопировать код
# Конвертируем байты в шестнадцатеричную строку
hex_string = b'\xf0\xf1\xf2'.hex()

И результат будет таким:

Markdown
Скопировать код
String Hex:  'f0f1f2'

Каждый байт преобразуется в соответствующее ему шестнадцатеричное представление.

Остановка на деталях: Другие способы преобразования

Байты в аналогичные форматы

Для множества задач полезны и другие форматы преобразования, например, base64 или zlib:

  • Используйте base64 для сохранения данных в URL или татуировках.
  • А zlib будет полезен для сжатия данных.

Прежде чем конвертировать, не забудьте закодировать строки

Для преобразования строк в шестнадцатеричный формат сначала необходимо конвертировать их в байты:

Python
Скопировать код
string = 'trip'
byte_data = string.encode('utf-8')
hex_string = binascii.hexlify(byte_data).decode('ascii')

Возможные трудности

  • Размер шестнадцатеричной строки всегда в два раза больше, чем размер соответствующего байтового массива.
  • При использовании binascii.hexlify() для декодирования в строку важно выбрать подходящую кодировку — 'ascii' будет надежным решением.
  • В Python 3 метод bytes.encode('hex') более не используется и вызовет ошибку.

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

  1. Встроенные типы — Документация Python 3.12.1 — Описание использования str.format() для форматирования строк.
  2. binascii — Преобразование между бинарным и ASCII форматами — Документация Python 3.12.1 — Описывается binascii.hexlify() для преобразования данных в ASCII.
  3. Встроенные типы — Документация Python 3.12.1 — Об особенностях работы метода bytes.hex().
  4. codecs — Реестр кодеков и базовые классы — Документация Python 3.12.1 — О возможностях кодирования данных с использованием модуля codecs.
  5. PEP 358 – Объект типа "bytes" — Подробности о типе bytes и его использовании.
  6. PyFormat: Как использовать % и .format() для форматирования — Подробное руководство по форматированию строк с использованием str.format().