首页 > 解决方案 > Python struct.unpack 字节长度问题

问题描述

我有以下代码:

msg = b'0,[\x00\x01\x86\xec\x96N'
print(struct.unpack("<"+"I",msg))

但是每次我尝试这样做时,它都会说

struct.error: unpack 需要 4 个字节的缓冲区

我试图做的是以下

times = int(len(msg)/4)
 struct.unpack("<"+"I" * times,msg)

但它并不总是有效,我认为在奇数上,我怎样才能获得正确的尺寸,这样我就不会遇到这些问题?

标签: pythonpython-3.xstructbyteendianness

解决方案


struct.unpack要求被消耗的缓冲区的长度正好是格式的大小。[1]

改为使用struct.unpack_from,这要求正在消耗的缓冲区的长度至少是格式的大小。[2]

>>> msg = b'0,[\x00\x01\x86\xec\x96N'

>>> import struct
>>> print(struct.unpack("<"+"I", msg))
Traceback (most recent call last):
  File "<input>", line 1, in <module>
struct.error: unpack requires a buffer of 4 bytes

>>> print(struct.unpack_from("<"+"I", msg))
(5975088,)

额外的字节将被忽略unpack_from

[1] https://docs.python.org/3/library/struct.html#struct.unpack
[2] https://docs.python.org/3/library/struct.html#struct.unpack_from


推荐阅读