Explain the extra padding in struct.pack with native byte order
Can someone explain why I am getting extra bytes when I use native byte ordering with struct.pack?
'cI', 'a', 1) 'a\x00\x00\x00\x01\x00\x00\x00' > struct.pack('<cI', 'a', 1) 'a\x01\x00\x00\x00'> import struct > struct.pack(
so the native byte order has 'a' and then 3- (00 bytes) before it. Why does every byte order have bytes, while the byte order in bytes is not limited?
source to share
This is explained in the documentation
Note: By default, the boxing result of a given C-structure includes bytes with bytes to maintain correct alignment for the C types involved. Similarly, alignment is taken into account when unboxing. This behavior is chosen so that the packed structure's bytes match exactly the in-memory layout of the corresponding C structure. To handle platform-independent data formats, or to omit implicit element bytes, use standard size and alignment instead of native size and alignment: see section " Order, size and alignment of bytes ".
Native size and alignment are determined using the C compiler sizeof expression . This is always combined with native byte order.
- Padding is only automatically added between sequential structure members.
- No additive is added at the beginning or at the end of the coded structure. No additive is added when using non-native size and alignment, for example. with '<,'>, '=, and' !.
- To align the end of a structure to an alignment requirement of a particular type, end the format with a code for that type with zero recounts. See Examples.
source to share