[Haskell-cafe] Bit Field Marshalling

Dan Weston westondan at imageworks.com
Fri Nov 7 12:56:56 EST 2008

 > C standard allows padding and reorder of struct entries

Almost. The ISO C standard does allow structs padding, but *not* reordering:

ISO/IEC 9899:1999 C Standard §

"Within a structure object, the non-bit-field members and the units in 
which bit-fields reside have addresses that increase in the order in 
which they are declared. A pointer to a structure object, suitably 
converted, points to its initial member (or if that member is a 
bit-field, then to the unit in which it resides), and vice versa. There 
may be unnamed padding within a structure object, but not at its beginning."


Lutz Donnerhacke wrote:
> * Michael D. Adams wrote:
>> But as far as I can tell, hsc2hs doesn't support bit
>> fields.  On top of that I'm not sure I can make any safe assumptions
>> about what order the bit fields are packed (LSB or MSB first).
> C standard allows padding and reorder of struct entries in order to match
> alignment requirements. The only exeption are bitfields, which must not
> reordered and padded. This way bit fields are the only portable way to
> define the binary representation in C. Unfortunly the C standard does not
> specify any bit order for bit fields, but almost all implementations use
> the machine specific bit order, in order to ease access to multiple bits
> wide bit field and fill LSB to MSB. But there is no guarantee.

More information about the Haskell-Cafe mailing list