首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >struct.pack "Hq“编码错误

struct.pack "Hq“编码错误
EN

Stack Overflow用户
提问于 2021-08-17 14:22:05
回答 3查看 207关注 0票数 1

我试图用struct.pack将一个短的(2个字节)和一个长的(8个字节)的字节数组编码成一个字节数组,输出的大小为16而不是10:

代码语言:javascript
复制
import struct
print(len(struct.pack('Hq',1,2))) #show 16 and not 10

注:len(struct.pack('H',1))正确返回2,len(struct.pack('q',2))正确返回8

这是蟒蛇虫吗?我正在使用Python 3.9.5

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-17 14:44:34

这是填充的结果,为了与C代码/库实现更好的互操作性(请参阅文档顶部的注释)。

如果希望禁用填充,请执行以下操作

代码语言:javascript
复制
import struct
print(len(struct.pack('=Hq',1,2)))  # now shows 10

您可以阅读=文档中的其他特殊格式字符。

票数 2
EN

Stack Overflow用户

发布于 2021-08-17 14:30:47

您可以使用来自calcsizestruct函数来根据所使用的格式查看大小。

对于Hq

代码语言:javascript
复制
from struct import calcsize

calcsize('Hq')

根据文档:格式字符的排序可能会对大小产生影响,因为满足对齐要求所需的填充是不同的。

如果你换了订单,你就会得到你想要的10:

代码语言:javascript
复制
from struct import calcsize

calcsize('qH')
票数 0
EN

Stack Overflow用户

发布于 2021-08-17 14:45:29

这是因为对齐。如果没有在格式字符串的开头指定任何标志,则使用@,它使用的是“本机对齐”:https://docs.python.org/3/library/struct.html#byte-order-size-and-alignment

使用任何其他标志(=、<、>或!)启动格式字符串将移除这个对齐。

calcsize('=Hq')将按预期返回10。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68819079

复制
相关文章

相似问题

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