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