Распаковать без подписи короткий в питоне - PullRequest
0 голосов
/ 15 октября 2018

Мне недавно нужно было декодировать двоичный файл, используя Python.Файл содержит неподписанные сокращения для хранения нужной мне информации о годе и месяце.Но причуда заключается в том, что «Year» хранится как unsigned short, а размер составляет 2 байта.Месяц также хранится как неподписанный короткий.Но размер составляет 1 байт.(См. Структуру файла ниже)

file struct

Вопрос в том, что я могу использовать метод распаковки Python для декодирования файла, но беззнаковый короткий тип принимает только 2 байтаданные.Итак, как я могу декодировать информацию «Месяца»?Стоит ли использовать другие техники?

import struct

with open("1.bin", "rb") as binary_file:
     a = struct.unpack('H',binary_file.read(2))
     print (type(a), a)            

1 Ответ

0 голосов
/ 15 октября 2018

Однобайтовое целое число без знака известно как беззнаковый символ.Таким образом, вы должны иметь возможность использовать это для декодирования этого байта:

a = struct.unpack('B',binary_file.read(1))

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

vals = struct.unpack('=HH5s13s5sHBBBB', binary_file.read(33))

Или распаковать непосредственно в именованные переменные, как это:

len, typ, fver, pver, rev, year, month, day, hour, minute = \
    struct.unpack('=HH5s13s5sHBBBB', binary_file.read(33))
...