gpt4 book ai didi

Python Struct 模块行为异常

转载 作者:太空狗 更新时间:2023-10-30 00:46:25 26 4
gpt4 key购买 nike

我正在使用 struct 模块,但事情并没有像我预期的那样进行。我确定这是由于我对模块的一些误解。

import struct
s = struct.Struct('Q');
print s.size
s = struct.Struct('H L Q');
print s.size
s = struct.Struct('H I Q');
print s.size
s = struct.Struct('H I Q H');
print s.size

这个的输出是:

8
24
16
18

我在这里错过了什么?为什么第二个和第三个大小不一样,为什么第四个不一样不是 16 岁吗?

最佳答案

对齐问题。

假设您在 64 位非 Windows 平台上运行:Q 和 L 的长度为 8 字节,I 为 4 字节,H 为 2 字节。

为了获得最佳效率,这些类型必须放置在其大小的倍数的位置。

因此,第二个结构将被安排为:

HH______ LLLLLLLL QQQQQQQQ

第三个结构:

HH__IIII QQQQQQQQ

和第四个结构:

HH__IIII QQQQQQQQ HH

如果你不想对齐,并且要求 L 有 4 个字节(“标准”大小),你需要使用 =><格式,如 http://docs.python.org/library/struct.html#struct-alignment 中所述:

import struct
s = struct.Struct('=Q')
print s.size
s = struct.Struct('=HLQ')
print s.size
s = struct.Struct('=HIQ')
print s.size
s = struct.Struct('=HIQH')
print s.size

演示:http://ideone.com/EMlgm

关于Python Struct 模块行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9068207/

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