我试图用struct.pack将一个短的(2个字节)和一个长的(8个字节)的字节数组编码成一个字节数组,输出的大小为16而不是10:
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
发布于 2021-08-17 14:44:34
发布于 2021-08-17 14:30:47
您可以使用来自calcsize的struct函数来根据所使用的格式查看大小。
对于Hq
from struct import calcsize
calcsize('Hq')根据文档:格式字符的排序可能会对大小产生影响,因为满足对齐要求所需的填充是不同的。
如果你换了订单,你就会得到你想要的10:
from struct import calcsize
calcsize('qH')发布于 2021-08-17 14:45:29
这是因为对齐。如果没有在格式字符串的开头指定任何标志,则使用@,它使用的是“本机对齐”:https://docs.python.org/3/library/struct.html#byte-order-size-and-alignment
使用任何其他标志(=、<、>或!)启动格式字符串将移除这个对齐。
calcsize('=Hq')将按预期返回10。
https://stackoverflow.com/questions/68819079
复制相似问题