我最近需要使用Python解码二进制文件。该文件包含用于存储所需的“年”和“月”信息的无符号缩写。但是奇怪的是:“年”存储为无符号短型,大小为2个字节。 “月”也存储为无符号短号。但是大小为1个字节。 (请参见下面的文件结构)
问题是我可以使用Python的unpack方法来解码文件,但是unsigned short类型仅接受2个字节的数据。那么,如何解码“月”信息呢?我应该使用其他技术吗?
import struct
with open("1.bin", "rb") as binary_file:
a = struct.unpack('H',binary_file.read(2))
print (type(a), a)
答案 0 :(得分:0)
一个字节的无符号整数称为无符号字符。因此,您应该可以使用它来解码该字节:
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))