[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:
http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf
ISO/IEC 9899:1999 C Standard §6.7.2.1.13
"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."
Dan
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