gpt4 book ai didi

Python struct.calcsize 长度

转载 作者:太空狗 更新时间:2023-10-29 21:24:27 25 4
gpt4 key购买 nike

>>>import struct
>>>size_a = struct.calcsize('10s')
size_a = 10
>>>size_b = struct.calcsize('iii')
size_b = 12
>>>size_c = struct.calcsize('10siii')
size_c = 24

有人能告诉我为什么 size_c 是 24 而不是 22(10 + 12) 吗?

最佳答案

这与 alignment 有关.任何特定类型(字节、整数、等) 只能从其标准大小的倍数的偏移量开始。

  • 字节串 s 可以从任何偏移量开始,因为它的标准大小是 1。

  • 但是一个 32 位整数 i 只能从 4 的倍数的偏移量开始(它的大小)。例如,0、4、8、12 等。

因此,为了分析结构体 10siii,我们首先剖析 10 字节的字符串。

Offset: 0 1 2 3 4 5 6 7 8 9
s----------------->

10s 占用了预期的前 10 个字节。现在以下 3 个整数。

                            1 1 1 1 1 1 1 1 1 1 2 2 2 2
Offset: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
s-----------------> x x i-----> i-----> i----->

每个整数跨越 4 个字节,但每个只能从一个偏移量开始4 的倍数(即 8、12、16、20,而不是 10)。由于起始字节串占10个字节,所以必须是填充 2 个字节以允许整数处于适当的偏移量。因此,您最终得到的结构总大小包括:10(起始字节字符串)+ 2(填充)+ 12(3 个整数)= 24 字节结构。

关于Python struct.calcsize 长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641735/

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