Как преобразовать список целых чисел в шестнадцатеричную строку в Python. Какие методы можно использовать для этой задачи. Какой метод самый эффективный для конвертации int в hex.
Что такое шестнадцатеричная система счисления и зачем она нужна
Шестнадцатеричная система счисления (hex) — это система счисления по основанию 16, которая использует 16 различных символов для представления чисел: цифры от 0 до 9 и буквы от A до F. Каждая шестнадцатеричная цифра представляет 4 бита информации.
Hex широко применяется в программировании и компьютерных технологиях по нескольким причинам:
- Компактное представление двоичных данных
- Удобство работы с двоичными числами (1 hex цифра = 4 бита)
- Представление цветов в веб-дизайне (#RRGGBB)
- Отображение адресов памяти
- Представление MAC-адресов сетевых устройств
Поэтому умение эффективно конвертировать числа в шестнадцатеричный формат очень полезно для программистов.
Метод 1: Использование bytearray
Самый простой способ преобразовать список целых чисел в шестнадцатеричную строку — использовать функцию bytearray() и метод hex():

ints = [0, 1, 2, 3, 255, 254, 253]
my_hex = bytearray(ints).hex()
print(my_hex)
# 00010203fffefd
Этот метод очень лаконичен и эффективен. Он работает следующим образом:
- bytearray(ints) создает байтовый массив из списка целых чисел
- Метод hex() преобразует байтовый массив в шестнадцатеричную строку
Преимущество этого метода в том, что он очень быстрый и требует минимум кода. Недостаток — меньшая гибкость по сравнению с другими методами.
Метод 2: Использование f-строк
F-строки в Python предоставляют удобный способ форматирования строк. Их можно использовать для преобразования целых чисел в hex:
ints = [0, 1, 2, 3, 255, 254, 253]
my_hex = ''.join(f'{i:02x}' for i in ints)
print(my_hex)
# 00010203fffefd
Разберем этот код подробнее:
- f'{i:02x}’ — f-строка, которая форматирует каждое число i
- :02x — спецификатор формата: 2 знака, шестнадцатеричное представление
- join() объединяет отформатированные строки
Этот метод очень гибкий и позволяет легко настраивать формат вывода. Например, можно изменить количество знаков или добавить разделители между числами.

Метод 3: Оператор форматирования %
Оператор % также может использоваться для форматирования строк и преобразования в hex:
ints = [0, 1, 2, 3, 255, 254, 253]
my_hex = ''.join('%02x'%i for i in ints)
print(my_hex)
# 00010203fffefd
Здесь ‘%02x’%i форматирует каждое число i в двузначное шестнадцатеричное представление. Этот метод работает аналогично f-строкам, но использует более старый синтаксис форматирования.
Метод 4: Метод string.format()
Метод format() строк предоставляет еще один способ форматирования:
ints = [0, 1, 2, 3, 255, 254, 253]
my_hex = ''.join('{:02x}'.format(i) for i in ints)
print(my_hex)
# 00010203fffefd
Здесь ‘{:02x}’.format(i) форматирует каждое число i. Этот метод более гибкий, чем оператор %, и позволяет использовать именованные аргументы.
Метод 5: Функция format()
Встроенная функция format() может использоваться для преобразования отдельных чисел в hex:
ints = [0, 1, 2, 3, 255, 254, 253]
my_hex = ''.join(format(i, '02x') for i in ints)
print(my_hex)
# 00010203fffefd
Этот метод очень чистый и прямолинейный. format(i, ’02x’) преобразует число i в двузначное шестнадцатеричное представление.

Метод 6: Использование map() и lambda
Для более функционального подхода можно использовать функцию map() вместе с lambda-функцией:
ints = [0, 1, 2, 3, 255, 254, 253]
my_hex = ''.join(map(lambda x: f'{x:02x}', ints))
print(my_hex)
# 00010203fffefd
Здесь map() применяет lambda-функцию к каждому элементу списка ints. Этот метод может быть более эффективным для больших списков, так как избегает создания промежуточного списка.
Какой метод выбрать для преобразования int в hex
Выбор метода преобразования целых чисел в шестнадцатеричную строку зависит от нескольких факторов:
- Производительность: Для больших списков метод bytearray() или map() может быть более эффективным.
- Читаемость: F-строки и функция format() обычно более понятны и легко читаемы.
- Гибкость: Методы форматирования строк (f-строки, format()) предоставляют больше возможностей для настройки вывода.
- Совместимость: Если нужна совместимость со старыми версиями Python, оператор % может быть лучшим выбором.
Для большинства случаев рекомендуется использовать f-строки или функцию format(), так как они обеспечивают хороший баланс между читаемостью, гибкостью и производительностью.

Как изменить количество цифр в шестнадцатеричном представлении
Иногда может потребоваться изменить количество цифр в шестнадцатеричном представлении каждого числа. Для этого нужно изменить спецификатор формата:
ints = [0, 1, 2, 3, 255, 254, 253]
my_hex = ' '.join(f'{i:03x}' for i in ints)
print(my_hex)
# 000 001 002 003 0ff 0fe 0fd
Здесь ’03x’ указывает, что каждое число должно быть представлено тремя шестнадцатеричными цифрами. Если число меньше, оно будет дополнено нулями слева.
Заключение и рекомендации по выбору метода
В этой статье мы рассмотрели 6 различных методов преобразования списка целых чисел в шестнадцатеричную строку в Python. Каждый метод имеет свои преимущества и недостатки:
- bytearray(): Самый быстрый метод, но менее гибкий
- f-строки: Современный, читаемый и гибкий метод
- Оператор %: Совместим со старыми версиями Python
- string.format(): Гибкий метод с поддержкой именованных аргументов
- format(): Чистый и прямолинейный метод
- map() с lambda: Эффективен для больших списков
Для большинства случаев рекомендуется использовать f-строки или функцию format(), так как они обеспечивают хороший баланс между читаемостью, гибкостью и производительностью. Однако, если производительность критична, стоит рассмотреть методы bytearray() или map().

Независимо от выбранного метода, важно понимать принципы работы шестнадцатеричной системы и уметь эффективно применять её в своих проектах. Практика и эксперименты с различными методами помогут вам выбрать наиболее подходящий подход для конкретной задачи.
Монитор
— Arduino CLI
Содержание
cc/arduino/cli/monitor/v1/monitor.proto
- Конфигурация монитора
- StreamingOpenRequest
- StreamingOpenResponse
- MonitorConfig.TargetType
- МониторСервис
- Типы скалярных значений
Топ
cc/arduino/cli/monitor/v1/monitor.proto
Конфигурация монитора
Сообщает монитору, какую цель открыть, и предоставляет дополнительные параметры, которые могут потребоваться для настройки цели. или сам монитор. ПРЕДУПРЕЖДЕНИЕ ОБ УСТАРЕНИИ: MonitorConfig устарел и будет удален в будущем выпуске. Использовать Вместо этого используются ArduinoCoreService.Monitor и ArduinoCoreService.EnumerateMonitorPortSettings.
Поле | Тип | Этикетка | Описание |
---|---|---|---|
цель | строка | Имя цели.![]() | |
тип | MonitorConfig.TargetType | ||
дополнительная_конфигурация | google.protobuf.Struct | Дополнительные параметры, которые могут потребоваться для настройки цели или самого монитора. | |
recv_rate_limit_buffer | int32 | Этот параметр указывает, сколько байтов должно быть буферизовано на стороне сервера перед удалением. Если >0, то сервер включит ограничитель скорости и будет отправлять входящие данные клиенту только тогда, когда клиент это разрешит: подробности см. в параметре StreamingOpenReq.recv_acknowledge. |
StreamingOpenRequest
Сообщение верхнего уровня, отправленное клиентом для метода StreamingOpen
. Несколько сообщений StreamingOpenReq
могут быть
отправлено, но первое сообщение должно содержать сообщение monitor_config
для инициализации цели монитора.
monitor_config
. УСТАРЕВАНИЕ
ПРЕДУПРЕЖДЕНИЕ. StreamingOpenRequest устарел и будет удален в будущем выпуске. Используйте ArduinoCoreService.Monitor и
Вместо этого используйте ArduinoCoreService.EnumerateMonitorPortSettings.Поле | Тип | Этикетка | Описание |
---|---|---|---|
конфигурация | Конфигурация монитора | Предоставляет монитору информацию, указывающую, что является целью. Первое сообщение StreamingOpenReq должно содержать сообщение config . | |
данные | байт | Данные для отправки отслеживаемой цели. | |
recv_acknowledge | int32 | Если ограничитель скорости включен, этот параметр используется для сообщения о количестве успешно обработанных сообщений StreamingOpenResp (с данными).![]() |
StreamingOpenResponse
ПРЕДУПРЕЖДЕНИЕ ОБ УСТАРЕНИИ: StreamingOpenResponse устарел и будет удален в будущем выпуске. Использовать Вместо этого используются ArduinoCoreService.Monitor и ArduinoCoreService.EnumerateMonitorPortSettings.
Поле | Тип | Этикетка | Описание |
---|---|---|---|
данные | байт | Данные, полученные от цели. | |
упал | int32 | Количество потерянных байтов. Во время регулярных обновлений это число должно быть равно 0, но в случае, если клиент не может достаточно быстро обработать окно recv, этот параметр сообщит о количестве потерянных байтов. |
MonitorConfig.TargetType
Имя | Номер | Описание |
---|---|---|
TARGET_TYPE_SERIAL | 0 | |
TARGET_TYPE_NULL | 99 |
МониторСервис
MonitorService предоставляет услуги по мониторингу плат. ПРЕДУПРЕЖДЕНИЕ ОБ УСТАРЕНИИ: MonitorService устарел и будет
удалены в будущем выпуске. Вместо этого используйте ArduinoCoreService.Monitor и ArduinoCoreService.EnumerateMonitorPortSettings.
Название метода | Тип запроса | Тип ответа | Описание |
---|---|---|---|
StreamingOpen | Поток StreamingOpenRequest | Поток StreamingOpenResponse | Открытие двунаправленного потока монитора. Это можно использовать для реализации чего-то похожего на последовательный монитор Arduino IDE. |
Типы скалярных значений
.прото Тип | Примечания | С++ | Ява | Питон | Перейти | С# | PHP | Рубин |
---|---|---|---|---|---|---|---|---|
двойной | двойной | двойной | поплавок | поплавок64 | двойной | поплавок | Поплавок | |
поплавок | поплавок | поплавок | поплавок | поплавок32 | поплавок | поплавок | Поплавок | |
int32 | Использует кодировку переменной длины.![]() | int32 | интервал | интервал | int32 | интервал | целое число | Bignum или Fixnum (при необходимости) |
int64 | Использует кодировку переменной длины. Неэффективно для кодирования отрицательных чисел — если в вашем поле могут быть отрицательные значения, используйте вместо этого sint64. | int64 | длинный | внутр./длинн. | int64 | длинный | целое/строка | Бигнум |
uint32 | Использует кодировку переменной длины. | uint32 | интервал | внутр./длинн. | uint32 | и | целое число | Bignum или Fixnum (при необходимости) |
uint64 | Использует кодировку переменной длины.![]() | uint64 | длинный | внутр./длинн. | uint64 | улонг | целое/строка | Bignum или Fixnum (при необходимости) |
синт32 | Использует кодировку переменной длины. Целочисленное значение со знаком. Они более эффективно кодируют отрицательные числа, чем обычные int32. | int32 | интервал | интервал | int32 | интервал | целое число | Bignum или Fixnum (при необходимости) |
uint64 | длинный | внутр./длинн. | uint64 | улонг | целое/строка | Бигнум | ||
фиксированный32 | Всегда четыре байта. | int32 | интервал | интервал | int32 | интервал | целое число | Bignum или Fixnum (при необходимости) |
фиксированный64 | Всегда восемь байт.![]() | int64 | длинный | внутр./длинн. | int64 | длинный | целое/строка | Бигнум |
логический | логический | логическое значение | логическое значение | логический | логический | логическое значение | Истинный класс/ложный класс | |
строка | Строка всегда должна содержать кодировку UTF-8 или 7-битный текст ASCII. | строка | Строка | стр/юникод | строка | строка | строка | Строка (UTF-8) |
байт | Может содержать любую произвольную последовательность байтов. | строка | БайтСтрока | ул | []байт | БайтСтрока | строка | Строка (ASCII-8BIT) |
Форматирование целочисленного списка в шестнадцатеричную строку — Шесть способов Pythonic — Finxter
от Криса
5/5 — (1 голос)
Формулировка задачи
💬 Вопрос : Как создать строку шестнадцатеричных цифр из списка целых чисел ( 0
– 255
), чтобы каждая шестнадцатеричная цифра состояла из двух цифр, таких как "00",
"01"
, …, "fe"
, "ff"
?
Вот пример пары ввода/вывода:
В : [0, 1, 2, 3, 255, 254, 253] Out : '00010203fffefd'
Метод 1: Bytearray
Самый простой способ преобразовать список целых чисел в шестнадцатеричную строку — использовать bytearray(ints)
для создания bytearray
и вызова метода bytearray(ints).
для преобразования его в шестнадцатеричную строку. hex()
Вот простой пример:
ints = [0, 1, 2, 3, 255, 254, 253] my_hex = массив байтов (целые).hex() печать (my_hex) # 00010203fffefd
Теперь, если вы похожи на меня, вам не слишком удобно работать с байтовыми массивами и их сравнением с простым типом байт
в Python. Если вы хотите освежить свою память, не стесняйтесь проверить наш интересный учебник:
🌍 Рекомендуемое руководство : Bytes vs Bytearrays в Python
Метод 2: f-String
Выражение ''.join(f'{i:02x}' for i in ints)
список целых чисел в одну двухзначную шестнадцатеричную строку с использованием f-строк и объединяет все эти двухзначные шестнадцатеричные строки в одну большую строку с использованием метода string.
. join()
целых = [0, 1, 2, 3, 255, 254, 253] my_hex = ''.join(f'{i:02x}' для i в целых числах) печать (my_hex) # 00010203fffefd
Вы можете узнать больше о выражении генератора, используемом в методе join(), в нашем подробном руководстве здесь:
🌍 Рекомендуемое руководство : Понимание списков в Python — Полное руководство
Метод 3: Оператор процента
Выражение ''.join('%02x'%i for i in ints)
преобразует каждое целое число из списка целых чисел в одну двухзначную шестнадцатеричную строку с использованием оператора процентного форматирования и объединяет все эти двухзначные шестнадцатеричные строки в одну большая строка с использованием метод string.join()
.
целых = [0, 1, 2, 3, 255, 254, 253] my_hex = ''.join('%02x'%i для i в целых числах) печать (my_hex) # 00010203fffefd
Интересным для вас может быть следующее руководство, в котором показано, как использовать различные операторы форматирования строк для преобразования целого числа в шестнадцатеричную строку — это лежит в основе того, что мы делаем в предыдущем фрагменте кода:
🌍 Рекомендуемое руководство : Python Int to Hex | Форматирование строк
Метод 4: string.format()
Выражение ''.join('{:02x}'.format(i) for i in ints)
преобразует каждое целое число из списка целых чисел в одну двухзначную шестнадцатеричную строку с использованием string.format( )
и объединяет все эти двухзначные шестнадцатеричные строки в одну большую строку, используя метод string.join()
.
целых = [0, 1, 2, 3, 255, 254, 253] my_hex = ''.join('{:02x}'.format(i) для i в целых числах) печать (my_hex) # 00010203fffefd
Я создал целый учебник по 9Метод 0092 string.format() — посмотрите здесь.
Метод 5: format()
Выражение ''.join(format(i, '02x') for i in ints)
преобразует каждое целое число из списка целых чисел в одну двухзначную шестнадцатеричную строку, используя встроенная функция Python format()
и объединяет все эти двухзначные шестнадцатеричные строки в одну большую строку, используя метод string.join()
.
целых = [0, 1, 2, 3, 255, 254, 253] my_hex = ''.join (формат (i, '02x') для i в целых числах) печать (my_hex) # 00010203fffefd
На самом деле я предпочитаю этот подход, если вы не хотите использовать f-строки, потому что он чист, и в нем мало ненужного синтаксического сахара, такого как символ процента, скобки или что-то еще.
Вы можете узнать больше о встроенной функции здесь:
🌍 Рекомендуемое руководство : Функция Python format(): Руководство по примерам без BS вы хотите использовать более двух цифр в шестнадцатеричной строке, которая была результатом преобразования из отдельного целого числа в список?
Скажем, 3 цифры в шестнадцатеричной строке?
Чтобы использовать более двух цифр в шестнадцатеричной строке при преобразовании списка целых чисел в одну строку из n
-значных шестнадцатеричных чисел, используйте спецификатор формата 0nx
, заменив n
нужным количеством цифр.
-
0
означает «добавить 0 символов влево, чтобы убедиться, что все шестнадцатеричные строки имеют одинаковую ширину» -
n
означает «ширину шестнадцатеричной строки после преобразования» . Это количество0
добавлено, чтобы каждая шестнадцатеричная строка содержала одинаковое количество цифр. -
x
означает «преобразование в шестнадцатеричное строковое представление» . Вы также можете конвертировать в другие системы счисления, такие как двоичная или восьмеричная. Но мы не будем здесь. 😉
Например, выражение ' '.join(f'{i:03x}' for i in ints)
может дать эту шестнадцатеричную строку '000 001 002 003 0ff 0fe 0fd'
:
ints = [0 , 1, 2, 3, 255, 254, 253] my_hex = ' '.join(f'{i:03x}' для i в целых числах) печать (my_hex) # 000 001 002 003 0ff 0fe 0fd
Существует больше способов преобразования целого числа в шестнадцатеричное. Я мог бы придумать произвольное множество комбинаций методов, просто варьируя разные подходы, но я думаю, что вы уловили идею.
Если вы хотите узнать больше о методах для использования в качестве выражения в выражении генератора всех предыдущих фрагментов кода, ознакомьтесь с этим руководством.