首页 > 解决方案 > 我对python中的解包函数有问题

问题描述

对不起,因为我的英语不好。

我很想用 python 中的 unpack 解码一些二进制消息。但我有问题

第一条消息如下所示

from struct import *
firstMessage = b'\x00\x00\x00\x00\xff\xff\xff\x00' #without tags
decodeFirstMessage = unpack('1q',firstMessage)
print(decodeFirstMessage[0])

第二条消息看起来像这样

from struct import *
secondMessage = b'*xxyyzz \x03 \x00\x00\x00\x00\xff\xff\xff\x00 tago1;' #with tags
decodeSecondMessage = unpack('7s1s1B1sq1s6s',firstMessage)
print(decodeSecondMessage [0])

对于我得到的第一个代码:

72057589742960640

作为答案。

对于我得到的第二个代码:

unpack 需要 31 个字节的缓冲区

作为答案。

我试图用这段代码验证函数解包中的格式值

print(calcsize('1q'))
print(calcsize('7s1s1B1sq1s6s'))

我得到:

8

31

我自己计算了字节并得到

8

25

当我在“格式”中用 b 或 h 更改 q 时,我用 calcsize() 得到 18 字节或 19 字节的正确值

但是对于 l 和 qi 有问题

我的功能有什么问题或如何解决这个问题?

标签: pythonpython-3.xstructunpack

解决方案


原因是填充。

阅读整个文档部分字节顺序、大小和对齐方式

一个例子:

>>> print(calcsize('1s1q'))
16
>>> print(calcsize('=1s1q'))
9

推荐阅读