Стандартный модуль структуры не поддерживает все возможные размеры, поэтому вы должны либо самостоятельно соединить несколько битов (см. Ответ Дитриха), либо использовать внешние модули, такие как цепочка битов .
>>> from bitstring import BitArray
>>> b = BitArray(bytes=b'\x05\x00\x00\x00\x00\x00\x05\x00')
>>> b.unpack('<H6B')
[5, 0, 0, 0, 0, 5, 0]
, что соответствует стандарту struct.unpack
. Но теперь мы можем вместо этого распаковать второй элемент как 6-байтовое (48-битное) целое число без знака с прямым порядком байтов:
>>> b.unpack('<H, uintle:48')
[5, 21474836480]
, который дает вам тот же результат, что и ответ Дитриха, а также показывает, что вы ошиблись в своем вопросе! Что вам нужно в этом случае:
>>> b.unpack('uintle:48, <H')
[5, 5]
Обратите внимание, что вы также можете написать <H
как uintle:16
, если хотите более последовательную запись.