struct.unpack() struct.error: unpack 需要 124 字节的缓冲区

Posted

技术标签:

【中文标题】struct.unpack() struct.error: unpack 需要 124 字节的缓冲区【英文标题】:struct.unpack() struct.error: unpack requires a buffer of 124 bytes 【发布时间】:2021-10-06 14:37:43 【问题描述】:

我有一个套接字客户端与 python 套接字服务器通信

客户端以 112 字节的块发送数据包,这是我尝试从服务器端解包的方法

self.unpacked = struct.unpack("i f f f f f f f f f i f i f f f f f f B f f B f f B f f B f f", msg)

我有以下错误:

struct.error: unpack requires a buffer of 124 bytes

这是味精的样子:

b'\xcf\xff\xff\xff\x01\x00|D\x07\x01\xc4B\x01\x00\xc8C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?P\x00\x00\x00\x00\x00\x00\x00\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x00\x00\x00\x00\x00\x00\x00\x00'

长度为 112

如果我计算 struct.unpack args 中类型的总大小

我明白了

i f f f f f f f f f i f i f f f f f f B f f B f f B f f B f f
4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+1+4+4+1+4+4+1+4+4+1+4+4
== 112 bytes

我的问题是为什么在 args 只指定 112 个字节时 unpack 需要 124 个缓冲区?

【问题讨论】:

【参考方案1】:

python struct unpack length error

所以我不得不改变

"i f f f f f f f f f i f i f f f f f f B f f B f f B f f B f f"

"<i f f f f f f f f f i f i f f f f f f B f f B f f B f f B f f"

因为“B”(1字节)需要它

python struct unpack length error

【讨论】:

以上是关于struct.unpack() struct.error: unpack 需要 124 字节的缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python struct.unpack

如何使用 struct.unpack 并将其转换为 Objective-c 中的值

在 struct.unpack 格式字符串中间切换字节顺序

了解 struct.unpack python

使用 struct.unpack_from 解析时,特定图像返回奇怪的值

将大端字节数组转换为 int,如 python 中的 struct.unpack