/********************************************** * * * gcc -Wall struct_endian.c -o struct_endian * * * **********************************************/ #include #include #if __BYTE_ORDER == __LITTLE_ENDIAN union byte { unsigned char all; struct { unsigned char zero:1; unsigned char one:1; unsigned char two:1; unsigned char three:1; unsigned char four:1; unsigned char five:1; unsigned char size:1; unsigned char seven:1; } split; }; #elif __BYTE_ORDER == __BIG_ENDIAN union byte { unsigned char all; struct { unsigned char seven:1; unsigned char size:1; unsigned char five:1; unsigned char four:1; unsigned char three:1; unsigned char two:1; unsigned char one:1; unsigned char zero:1; } split; }; #endif int main(void) { union byte a; unsigned char c; a.all = 0x1; c = 0x1; printf("struct:\n"); printf(" bit 0 = %u\n", a.split.zero); printf(" bit 7 = %u\n", a.split.seven); printf("char:\n"); printf(" bit 0 = %u\n", c & 0x1); printf(" bit 7 = %u\n", c >> 7); return 0; }