Python的calcsize很奇怪

时间:2015-07-02 09:30:31

标签: python-3.x

我正在尝试在python中处理二进制数据,并发生奇怪的事情。

from struct import *
print(calcsize('c')) #prints 1
print(calcsize('h')) #stands for short, prints 2
print(calcsize('ch')) #prints 4 O_O

这怎么可能发生?

1 个答案:

答案 0 :(得分:0)

这是因为必须正确对齐单个值,这是系统原生的。在这种情况下,短路需要在偶数字节上对齐。所以当你执行ch时,内存使用如下字节:

┌───┬───┬───┬───┐
│ c │   │   h   │
└───┴───┴───┴───┘

所以剩下一个未占用的字节。您可以使用其他char填写该内容,而不会增加总大小:

>>> calcsize('cch')
4

但是如果你在最后添加char,那么你又会增加尺寸:

>>> calcsize('chc')
5
┌───┬───┬───┬───┬───┐
│ c │   │   h   │ c │
└───┴───┴───┴───┴───┘

顺便说一下。您也可以通过在开头添加control character来覆盖此对齐方式。例如,您可以在开头添加=以完全关闭原生对齐:

>>> calcsize('=ch')
3