Bug in struct.pack?

Alex Stapleton alexs at advfn.com
Wed Jan 11 06:26:33 EST 2006


<---- Idiot.

On 11 Jan 2006, at 10:46, Alex Stapleton wrote:

> 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.
>
> Also.
>
>>>> calcsize('BL')
> 8
>>>> calcsize('BBL')
> 8
>>>> calcsize('BBBL')
> 8
>>>> calcsize('BBBBL')
> 8
>>>> calcsize('BBBBBL')
> 12
>>>> pack("BBBL", 255,255,255,0)
> '\xff\xff\xff\x00\x00\x00\x00\x00' ####### That's 3 255's and 5(!?!?)
> 0's
>>>> pack("BBBBL", 255,255,255,255,0)
> '\xff\xff\xff\xff\x00\x00\x00\x00' ######### 4 255's and 4 0's!
>
> Which is all kinds of wrong.
>
> BL should be 9
> BBL should be 10
> ....
>
> Python 2.4.1 (#2, May  5 2005, 11:32:06)
> [GCC 3.3.5 (Debian 1:3.3.5-12)] on linux2
>
> Same behaviour on my PowerBook using
>
> Python 2.3.5 (#1, Mar 20 2005, 20:38:20)
> [GCC 3.3 20030304 (Apple Computer, Inc. build 1809)] on darwin
>
> sizeof(unsigned long) should be 8 on both of these platforms
> sizeof(unsigned char) should be 1 on both as well
>
> So am I just being stupid and not specifying something I should be?
> Or is struct really that broken?
> -- 
> http://mail.python.org/mailman/listinfo/python-list




More information about the Python-list mailing list