我正在使用struct.unpack()
从二进制文件中收集特定数据。
point4, = struct.unpack("B", data[3:4])
point5, = struct.unpack("H", data[4:6])
point4 预计为 Uchar,point5 预计为 Ushort。每个https://docs.python.org/3/library/struct.html使用格式字符。
以上工作正常,并正确收集预期数据。但是,如果我尝试将两个语句组合成类似的内容:point4, point5, = struct.unpack("BH", data[3:6])
,我会收到以下异常错误:unpack requires a buffer of 4 bytes
。这让我感到惊讶,因为我已经能够使用如下组合语句成功提取相同的数据以及更多数据:
point1, point2, point3, point4, point5, = struct.unpack("BBBBH", data[0:6])
我不确定为什么point4, point5, = struct.unpack("BH", data[3:6])
会给我一个错误,但我想在一行而不是两行中获取这些数据。
问题是data[3:6]
只有 3 个字节长,但默认情况下格式"BH"
需要 4 个字节,因为假定默认对齐与填充。你可以用一个来证明这一点:
print(f'{struct.Struct("BH").size=}') # -> 4
请参阅模块文档的字节顺序、大小和对齐部分struct
。
您可以通过显式指定字节顺序来覆盖它。IE
point4, point5 = struct.unpack("=BH", data[3:6]) # No error.
另请注意,没有理由在赋值表达式的左侧在代码中使用多余的逗号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句