Python struct.unpack字节长度问题

问题描述

我有以下代码

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

但是每次我尝试执行此操作时都会说

struct.error:解压缩需要4个字节的缓冲区

我想做的是以下

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

但是它并不总是有效,我认为在数量不均的情况下,如何获得正确的尺寸,这样我就不会遇到这些问题?

解决方法

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