首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >struct.pack比它的部件长吗?

struct.pack比它的部件长吗?
EN

Stack Overflow用户
提问于 2020-04-23 15:07:17
回答 1查看 172关注 0票数 1

我想解压缩6个值:2* UInt16,1* UInt32,1* UInt16,2* Int64

把大小加起来,我得到26。

但是python似乎认为应该是32:

代码语言:javascript
复制
>>> a = struct.pack("H",0)
>>> len(a)
2 <-- correct
>>> a = struct.pack("L",0)
>>> len(a)
4 <-- correct
>>> a = struct.pack("q",0)
>>> len(a)
8 <-- correct
>>> a = struct.pack("HHLHqq",0,0,0,0,0,0)
>>> len(a)
32 < -- should be 2 + 2 + 4 + 2 + 8 + 8 = 26 
>>> a = struct.pack("HHLHq",0,0,0,0,0)
>>> len(a)
24 < -- should be 2 + 2 + 4 + 2 + 8 = 18
>>> a = struct.pack("HHLH",0,0,0,0)
>>> len(a)
10 <-- correct again

struct.unpack也有同样的问题,需要32字节才能解压缩"HHLHqq“。但是,在我的应用程序中,数据是从外部源发送的,它只有26个字节。

我可以一个一个地解压它作为一个解决办法,但必须有一个方法来禁用这个填充肯定?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-23 15:16:57

根据:https://docs.python.org/2/library/struct.html

在使用非本地大小和对齐时,不添加

填充,例如使用“<”、‘’>、‘=’和‘!’。

因此,您只需指定endianness,填充就会消失:

代码语言:javascript
复制
>>> import struct
>>> len(struct.pack("HHLHqq",0,0,0,0,0,0))
40
>>> len(struct.pack("<HHLHqq",0,0,0,0,0,0))
26
>>> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61390526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档