Вставить переменную в шестнадцатеричную строку

В клиенте есть шестнадцатеричные данные:

MESSAGE = "\x16\x01\x12\x03\x1b\x14\x30\x23\x80\x00\x03\xe8\x00\x00\x00\x00"
s.sendto(MESSAGE, (UDP_IP, UDP_PORT))

и сервер покажет:

16 01 12 03 1b 14 30 23 80 00 03 e8 00 00 00 00

но когда я хочу использовать переменную и цикл для увеличения последнего числа

for i in range(times):
     i += 1
     i = format(i, '02x')
MESSAGE = "\x16\x01\x12\x03\x1b\x14\x30\x23\x80\x00\x03\xe8\x00\x00\x00"+i
s.sendto(MESSAGE, (UDP_IP, UDP_PORT))

сервер покажет:

16 01 12 03 1b 14 30 23 80 00 03 e8 00 00 00 30 32

«+ I» становится ASCII ....

Итак, как мне сделать, чтобы сервер показывал:

16 01 12 03 1b 14 30 23 80 00 03 e8 00 00 00 01
16 01 12 03 1b 14 30 23 80 00 03 e8 00 00 00 02
16 01 12 03 1b 14 30 23 80 00 03 e8 00 00 00 03
...

Спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
46
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать строковый шаблон, например "\x%02x" % i.

Вы неправильно поняли вопрос.

Barmar 13.12.2018 04:33
\x предназначен для буквальных шестнадцатеричных кодов, он не обрабатывается после форматирования.
Barmar 13.12.2018 04:34
Ответ принят как подходящий

Не форматируйте номер, просто создайте символ с этим кодом с помощью функции chr.

И вместо того, чтобы добавлять 1 в i в цикле, просто измените диапазон цикла.

for i in range(1, times+1):
    i = chr(i)
    MESSAGE = "\x16\x01\x12\x03\x1b\x14\x30\x23\x80\x00\x03\xe8\x00\x00\x00"+i
    s.sendto(MESSAGE, (UDP_IP, UDP_PORT))

Другие вопросы по теме