我有一个长度为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/