Bug in struct.pack?

Raymond Hettinger python at rcn.com
Wed Jan 11 06:20:34 EST 2006


[Alex Stapleton]
> from struct import pack
>  >>> pack("B", 1)
> '\x01'
>  >>> pack("BB", 0, 1)
> '\x00\x01'
>  >>> pack("BI", 0, 1)
> '\x00\x00\x00\x00\x01\x00\x00\x00'
>  >>> calcsize("BI")
> 8
>  >>> calcsize("BB")
> 2
>
> Why does an unsigned char suddenly become 4 bytes long when you
> include an unsigned int in the format string? It's consistent
> behaviour but it's incorrect.

You're seeing native alignment come into play.
Specify a standard alignment to avoid padding.

>>> pack("BI", 0, 1)
'\x00\x00\x00\x00\x01\x00\x00\x00'
>>> pack("=BI", 0, 1)
'\x00\x01\x00\x00\x00'

All is explained in the docs:
 http://docs.python.org/lib/module-struct.html


Raymond




More information about the Python-list mailing list