Hello, On Sat, Sep 06, 2003 at 11:44:24AM +0200, Martin Mares wrote:
| +#ifdef CPU_LITTLE_ENDIAN | u8 ms:1; | u8 m:1; | u8 i:1; | u8 padding:5; | +#else | + u8 padding:5; | + u8 i:1; | + u8 m:1; | + u8 ms:1; | +#endif | };
I don't really understand this piece -- either it's a piece of packet as seen on the wire and then it must not depend on CPU endianity or it's already
It's a piece of packet coming on the wire... The problem is that bit ordering in a bit structure depends on the endianess of the host (at least for GCC): Please try the following program on x86 and PPC (with and without the "#ifdef BIG_ENDIAN"): #include <stdio.h> union mes_bits { struct { #ifdef BIG_ENDIAN unsigned char toto:2; unsigned char titi:1; unsigned char tata:5; #else unsigned char tata:5; unsigned char titi:1; unsigned char toto:2; #endif }; unsigned char data; }; int main(void) { union mes_bits bits; bits.toto = 1; bits.titi = 0; bits.tata = 2; printf("bits.data: 0x%.2x\n", bits.data); return 0; } Regards, Rani