Jonathan Brady wrote:
<[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]

Hello,

I was looking at this:
http://docs.python.org/lib/module-struct.html
and tried the following


import struct
struct.calcsize('h')

2

struct.calcsize('b')

1

struct.calcsize('bh')

4

I would have expected


struct.calcsize('bh')

3

what am I missing ?


Not sure, however I also find the following confusing:

struct.calcsize('hb')

3

struct.calcsize('hb') == struct.calcsize('bh')

False

I could understand aligning to multiples of 4, but why is 'hb' different from 'bh'?


Evidently, shorts need to be aligned at an even address on your platform. Consider the following layout, where `b' represents the signed char, `h' represents the bytes occupied by the short and `X' represents unused bytes (due to alignment.

'bh', a signed char followed by a short would look like:

bXhh -- or four bytes, but 'hb', a short followed by a signed char would be:

hhb (as `char' and its siblings have no alignment requirements)

HTH,
--ag

--
Artie Gold -- Austin, Texas
http://it-matters.blogspot.com (new post 12/5)
http://www.cafepress.com/goldsays
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to