我正在尝试在python中处理二进制数据,并发生奇怪的事情。
from struct import *
print(calcsize('c')) #prints 1
print(calcsize('h')) #stands for short, prints 2
print(calcsize('ch')) #prints 4 O_O
这怎么可能发生?
答案 0 :(得分:0)
这是因为必须正确对齐单个值,这是系统原生的。在这种情况下,短路需要在偶数字节上对齐。所以当你执行ch
时,内存使用如下字节:
┌───┬───┬───┬───┐
│ c │ │ h │
└───┴───┴───┴───┘
所以剩下一个未占用的字节。您可以使用其他char
填写该内容,而不会增加总大小:
>>> calcsize('cch')
4
但是如果你在最后添加char
,那么你又会增加尺寸:
>>> calcsize('chc')
5
┌───┬───┬───┬───┬───┐
│ c │ │ h │ c │
└───┴───┴───┴───┴───┘
顺便说一下。您也可以通过在开头添加control character来覆盖此对齐方式。例如,您可以在开头添加=
以完全关闭原生对齐:
>>> calcsize('=ch')
3