Glen Rice wrote: > In IPython: >>import struct >>struct.calcsize('4s') > 4 >>struct.calcsize('Q') > 8 >>struct.calcsize('4sQ') > 16 > > This doesn't make sense to me. Can anyone explain?
A C compiler can insert padding bytes into a struct: """By default, the result of packing a given C struct includes pad bytes in order to maintain proper alignment for the C types involved; similarly, alignment is taken into account when unpacking. This behavior is chosen so that the bytes of a packed struct correspond exactly to the layout in memory of the corresponding C struct. To handle platform-independent data formats or omit implicit pad bytes, use standard size and alignment instead of native size and alignment: see Byte Order, Size, and Alignment for details. """ http://docs.python.org/library/struct.html#struct-alignment You can avoid this by specifying a non-native byte order (little endian, big endian, or "network"): >>> struct.calcsize("4sQ") 16 >>> struct.calcsize("!4sQ") 12 -- http://mail.python.org/mailman/listinfo/python-list