вставить переменную в шестнадцатеричную строку - PullRequest
0 голосов
/ 13 декабря 2018

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

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, чтобы увеличить последнее число

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
...

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Не форматируйте число, просто создайте символ с этим кодом, используя функцию 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))
0 голосов
/ 13 декабря 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...