python struct unpack bad char - PullRequest
       0

python struct unpack bad char

0 голосов
/ 17 февраля 2020

Я пытаюсь написать небольшой анализатор пакетов, впервые используя для него структуру python:

content = struct.unpack("BBBBBB<HBB", packet[:10])

Пакет содержит следующие байты:

7e03 ffff ff0f 1e00 1001 0c00 0000 0000

Я получил это ошибка: struct.error: bad char in struct format но я понятия не имею, откуда мне знать, что упоминал плохой символ. Также на этом примечании: поддерживает ли struct группирование элементов кортежа, потому что я бы предпочел распаковку сделать так:

content = struct.unpack("BB(BBBB)<HBB", packet[:10])

Поскольку это адрес, и если он будет содержаться внутри собственного кортежа в содержимом, он сделает очиститель имо.

1 Ответ

1 голос
/ 17 февраля 2020

< не может быть в середине строки формата, оно должно быть впереди.

Указывает порядок байтов с прямым порядком байтов и применяется ко всему пакету (но он не делает разница для однобайтовых значений, таких как указанные с B):

>>> packet = b'\x7e\x03\xff\xff\xff\x0f\x1e\x00\x10\x01\x0c\x00\x00\x00\x00\x00'
>>> struct.unpack("<BBBBBBHBB", packet[:10])
(126, 3, 255, 255, 255, 15, 30, 16, 1)

Чтобы интерпретировать четыре байта как одно целое число без знака, используйте I или L:

>>> struct.unpack("<BBIHBB", packet[:10])
(126, 3, 268435455, 30, 16, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...