python - 在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)
解决方案
一个字节的 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))
推荐阅读
- django - 为我的 Django 项目适当设置 BASE_DIR 和 PROJECT_DIR 以捕获我的 STATICFILES_DIRS
- javascript - Javascript代码中的按钮不计算方程
- php - 为什么我在网页的样式表文件中找不到 CSS 选择器(或修改规则)?
- python - 写入文件会复制 Python 中的最后一个条目
- javascript - 在定义没有声明 var 的变量时,您能否创建一个优先于 window 的对象?
- ssis - 尝试在 SSMS 中部署包但缺少集成服务目录 (SSISDB)
- reactjs - 为什么用花括号导入会导致问题?
- swift - UISegmentedControl selectedIndex 始终显示 0
- websocket - 带有广播 websocket 的负载均衡器
- grpc - 用于 gRPC-Web 的 grpc_cli