如何解决我在python中解压缩功能有问题
对不起,因为我的英语水平不好。
我想用python解压缩来解码somme二进制消息。但我有问题
第一个消息看起来像这样
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
作为答案。
我得到的第二个代码:
解压缩需要31个字节的缓冲区
作为答案。
我试图用此代码在解压缩函数中验证format的值
print(calcsize('1q'))
print(calcsize('7s1s1B1sq1s6s'))
我得到:
8
和
31
我自己计算了字节并得到了
8
和
25
当我用“格式”中的b或h更改q时,我用calcsize()获得正确的18字节或19字节的值
但是对于l和q我有问题
请问我的功能有什么问题或如何解决?
解决方法
这样做的原因是填充。
阅读整个文档部分Byte Order,Size,and Alignment
一个例子:
>>> print(calcsize('1s1q'))
16
>>> print(calcsize('=1s1q'))
9
,
简短版本是,请改用此格式:
"=7s1s1B1s1q1s6s"
较长的版本是alignment。当使用默认@
时,“字节顺序”,“大小”和“对齐”的意思是“本机”。解释格式以匹配平台上相应C struct
的布局。使用=
格式可切换为标准尺寸并对齐。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。