我有一个长度为41的bytes对象。我试着打开它:

struct.unpack('2B2B32sBi',data)

但我犯了个错误:
struct.error:解包需要长度为44的bytes对象
我认为在检查python文档之后,2B2B32sBi的长度应该是2*1+2*1+32*1+1+4=41。为什么我错了?

最佳答案

刚遇到填充,因为首先有字节数据,然后是整数(它具有更强的对齐约束)
documentation开始:
填充仅在连续的结构成员之间自动添加。在编码结构的开头或结尾不添加填充。
因此,必须指定一个endianness来禁用填充:

struct.unpack('<2B2B32sBi',data)

在阅读了Galen的优秀答案之后,为了完整性而编辑:如果不想强制endianness,最好指定=

关于python - python struct unpack length错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47750056/

10-12 16:39
查看更多