gpt4 book ai didi

Python:Struct.pack(format, [...]),虽然格式几乎相同,但打包数据的大小不同

转载 作者:行者123 更新时间:2023-12-05 05:25:09 24 4
gpt4 key购买 nike

import struct
data = struct.pack('ici', 1, chr(1), 1)
print(len(data))
#12

data = struct.pack('iic', 1, 1, chr(1))
print(len(data))
#9

两个'data'变量之间似乎没有区别,为什么'len(data)'的结果不同,一个是12,另一个是9

最佳答案

这种效果是因为对齐和实现它所需的填充。如果您引用 Struct 的 Python 标准库文档,它在第 7.3.2.1 节中说(我指的是 Python 2.7 文档):

Notes:
Padding is only automatically added between successive structure members. No padding is added at the beginning or the end of the encoded struct.
No padding is added when using non-native size and alignment, e.g. with ‘<’, ‘>’, ‘=’, and ‘!’.
To align the end of a structure to the alignment requirement of a particular type, end the format with the code for that type with a repeat count of zero. See Examples.

“i”的标准大小是四个字节,“c”的标准大小是 1。

在第一个“ici”包中,“c”必须被填充到 32 位对齐(即通过添加三个字节)才能添加最后的“i”——因此总长度为 12。

在“iic”包中,最后的“c”不用补,所以长度为9。

关于Python:Struct.pack(format, [...]),虽然格式几乎相同,但打包数据的大小不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32199065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com