Python вставляет короткое целое число в список байтов - PullRequest
2 голосов
/ 07 января 2010

У меня есть список байтов следующим образом

pkt_bytes = [ 0x02,0x07, 0xff,0xff ,0x00,0x03]

в позиции 0xff,0xff Я хочу поставить 16-битное короткое целое число

Как мне это сделать

Привет

Ответы [ 4 ]

5 голосов
/ 07 января 2010

Вы можете использовать модуль struct для упаковки значений в соответствующие форматы:

>>> pkt_bytes = [0x02, 0x07, 0xff, 0xff, 0x00, 0x03]
>>> myint = 123
>>> pkt_bytes[3:5] = [ord(b) for b in struct.pack("H",myint)]
>>> pkt_bytes
[2, 7, 255, 123, 0, 3]

По умолчанию это будет использовать собственный порядок байтов, но вы можете изменить это, используя модификаторы для форматирования строки. Поскольку ваша переменная называется pkt_bytes, я предполагаю, что вам нужен сетевой (байтовый) порядок байтов, который обозначается !:

>>> struct.pack("!H",5000)
'\x13\x88'
0 голосов
/ 07 января 2010
>>> pkt_bytes = [ 0x02,0x07, 0xff,0xff ,0x00,0x03]
>>> pkt_bytes[2:4] = [pkt_bytes[2] << 8 | pkt_bytes[3]]
>>> pkt_bytes
[2, 7, 65535, 0, 3]
0 голосов
/ 07 января 2010

Приведенный ниже код будет заменять каждое вхождение 0xff на 0x04, пока в списке не останется больше 0xff.

pkt_bytes = [0x02, 0x07, 0xff, 0xff ,0x00, 0x03]
while True:
    try:
        idx = pkt_bytes.index(0xff)
        pkt_bytes[idx] = 0x04
    except ValueError:
        break
0 голосов
/ 07 января 2010

Попробуйте:

>>> pkt_bytes.insert(3, 0xaa)

>>> help(pkt_bytes.insert)
Help on built-in function insert:

insert(...)
    L.insert(index, object) -- insert object before index
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...