首页 > 解决方案 > 在python中解压无符号短

问题描述

我最近需要使用 Python 解码二进制文件。该文件包含用于存储我想要的“年”和“月”信息的无符号缩写。但奇怪的是:“年”存储为无符号短,大小为 2 个字节。“月份”也存储为 unsigned short。但大小是 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)            

标签: pythonunpack

解决方案


一个字节的 unsigned int 称为 unsigned char。因此,您应该能够使用它来解码该字节:

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))

推荐阅读