为什么我在python中为char获取4个字节?

时间:2014-07-21 07:38:33

标签: python python-2.7 struct

file1 = open("test.txt", 'wb')
file1.write(struct.pack('icic', 1, '\t', 2, '\n'))
file1.close()
print os.path.getsize("test.txt")

它给了我13.但我认为它应该是4 + 1 + 4 + 1 = 10个字节。似乎它为一个字节存储'\ n',而对于4个字节存储'\ t'。想法? 谢谢!

1 个答案:

答案 0 :(得分:4)

要获得实际的结构大小,请使用struct.calcsize()

>>> import struct
>>> struct.calcsize('icic')
13

那是因为您使用的是默认对齐方式,然后应用了C规则:

  

默认情况下,C类型以机器的本机格式和字节顺序表示,并在必要时通过跳过填充字节正确对齐(根据C编译器使用的规则)。

第一个ic只有5个字节,但是如果你将它列出两次,C会将其填充为8,因此下一个ic对将它带到13.如果你使用3 {{ 1}}对你得到21等.C填充ic整数以对齐到4字节组。此data structure alignment用于提高内存性能,但在尝试将其用于不同目的时可能会出乎意料。

选择一个明确的字节顺序:

i

请参阅Byte Order, Size and Alignment section