If you absolutely need to get at the 32-bit integer value, you can use union mytype { { struct bits { unsigned int a:6; unsigned int b:4; unsigned int c:8; unsigned int d:5; unsigned int e:9; } b; unsigned int v; } variable; then access the bit-fields like unsigned int x = variable.b.e; variable.b.a = 3; x = variable.v; On 08/28/2009 12:58 -0700, Ben Rosenberg wrote: >> On Fri, Aug 28, 2009 at 11:40 AM, Randi Botse<nightdecoder@xxxxxxxxx> wrote: >> > Ben, after assign all bitfield struct member, how to pack them to be a >> > 32bit integer value? >> > >> > DEC BIN >> > 43 101011 -> foo.a (6 bit) >> > 11 1011 -> foo.b (4 bit) >> > 120 01111000 -> foo.c (8 bit) >> > 30 11110 -> foo.d (5 bit) >> > 418 110100010 -> foo.e (9 bit) >> > >> > the bit pattern is : 10101110110111100011110110100010 or 2933800354 in >> > decimal, is this possible? >> > >> > while with masking and shift i can pack them with: >> > ((foo.a & 0x3f) << 26) | ((foo.b & 0xf) << 22) | ((foo,c & 0xff) << >> > 14) | ((foo.d & 0x1f) << 9) | (foo.e & 0x1ff) >> > >> > >> >> The bitfield struct is already packed, you don't need to do anything >> else. Just assign values to the different parts. >> >> Ben >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html End of included message -- +----------------------+ | Tim Walberg | | 830 Carriage Dr. | | Algonquin, IL 60102 | | twalberg@xxxxxxxxxxx | +----------------------+
Attachment:
pgp2snQYV5CUl.pgp
Description: PGP signature