#include <stdio.h>
#include <limits.h>
#if CHAR_BIT != 8
#error "unsupported char size"
#endif
typedef enum { ONE, TWO, THREE } my_enum;
typedef struct
{
unsigned long var1 : 8;
unsigned long var2 : 24;
my_enum var3 : 2;
my_enum var4 : 2;
} my_struct;
int main(void)
{
int idx;
int bitIdx;
my_struct my_struct_var;
0,
sizeof(my_struct_var));
printf("sizeof(my_struct) = %lu\n", sizeof(my_struct
)); printf("sizeof(my_struct_var) = %lu\n", sizeof(my_struct_var
));
my_struct_var.var1 = 0x81; /* 1000 0001 */
my_struct_var.var2 = 0x800001; /* 1000 0000 0000 0000 0000 0001 */
my_struct_var.var3 = 0b10; /* 10 */
my_struct_var.var4 = 0b11; /* 11 */
for (idx = 0; idx < sizeof(my_struct_var); ++idx)
{
char * curByte = &my_struct_var;
curByte += idx;
for (bitIdx = 0; bitIdx < CHAR_BIT; ++bitIdx)
{
printf("%c ", ((*curByte
& (1 << ((CHAR_BIT
- 1) - bitIdx
))) >> ((CHAR_BIT
- 1) - bitIdx
)) + '0'); }
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4KCiNpZiBDSEFSX0JJVCAhPSA4CiNlcnJvciAidW5zdXBwb3J0ZWQgY2hhciBzaXplIgojZW5kaWYKCnR5cGVkZWYgZW51bSB7IE9ORSwgVFdPLCBUSFJFRSB9IG15X2VudW07Cgp0eXBlZGVmIHN0cnVjdAp7CiAgIHVuc2lnbmVkIGxvbmcgdmFyMSA6IDg7CiAgIHVuc2lnbmVkIGxvbmcgdmFyMiA6IDI0OwogICBteV9lbnVtICAgICAgIHZhcjMgOiAyOwogICBteV9lbnVtICAgICAgIHZhcjQgOiAyOwp9IG15X3N0cnVjdDsKCmludCBtYWluKHZvaWQpCnsKICAgaW50IGlkeDsKICAgaW50IGJpdElkeDsKICAgbXlfc3RydWN0IG15X3N0cnVjdF92YXI7CgogICBtZW1zZXQgKCZteV9zdHJ1Y3RfdmFyLAogICAgICAgICAgIDAsCiAgICAgICAgICAgc2l6ZW9mKG15X3N0cnVjdF92YXIpKTsKCiAgIHByaW50Zigic2l6ZW9mKG15X3N0cnVjdCkgICAgID0gJWx1XG4iLCBzaXplb2YobXlfc3RydWN0KSk7CiAgIHByaW50Zigic2l6ZW9mKG15X3N0cnVjdF92YXIpID0gJWx1XG4iLCBzaXplb2YobXlfc3RydWN0X3ZhcikpOwoKICAgbXlfc3RydWN0X3Zhci52YXIxID0gMHg4MTsgICAgIC8qIDEwMDAgMDAwMSAgICAgICAgICAgICAgICAgICAgICovCiAgIG15X3N0cnVjdF92YXIudmFyMiA9IDB4ODAwMDAxOyAvKiAxMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMSAqLwogICBteV9zdHJ1Y3RfdmFyLnZhcjMgPSAwYjEwOyAgICAgLyogMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgbXlfc3RydWN0X3Zhci52YXI0ID0gMGIxMTsgICAgIC8qIDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogICBmb3IgKGlkeCA9IDA7IGlkeCA8IHNpemVvZihteV9zdHJ1Y3RfdmFyKTsgKytpZHgpCiAgIHsKICAgICAgY2hhciAqIGN1ckJ5dGUgPSAmbXlfc3RydWN0X3ZhcjsKICAgICAgY3VyQnl0ZSArPSBpZHg7CiAgICAgIHByaW50ZigiXG5CeXRlICVkOiAgIiwgaWR4KTsKICAgICAgZm9yIChiaXRJZHggPSAwOyBiaXRJZHggPCBDSEFSX0JJVDsgKytiaXRJZHgpCiAgICAgIHsKICAgICAgICAgcHJpbnRmKCIlYyAiLCAoKCpjdXJCeXRlICYgKDEgPDwgKChDSEFSX0JJVCAtIDEpIC0gYml0SWR4KSkpID4+ICgoQ0hBUl9CSVQgLSAxKSAtIGJpdElkeCkpICsgJzAnKTsKICAgICAgfQogICB9CgogICByZXR1cm4gMDsKfQ==