问题描述
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