Search code examples
cgccbit-packing

Array inside a bit-packed struct


I'd like to have an array inside of a bit-packed struct. I statically know the size of the array (32), and I'd like each element in the array to be a single bit. For example, I would like to be able to say something like:

struct example_s {
  // ...
  unsigned int flags[32] : 32;
} __attribute__((__packed__));

I've tried a couple things, but gcc won't budge. It would be nice to be able to do this so that I could write clean code that iterated over the elements in the packed array. Ideas?


Solution

  • If you simply put it into a (32-bit) int, then you can cleanly iterate over the bits with a for loop like this:

    for (bit = 0; bit < 32; bit++)
        flagValue = ((flags & (1<<bit)) != 0;
    

    Not much harder to write than an array indexing syntax.

    If you wish to hide the bit-twiddling to make the code more readable you could even use a function or macro to access the bits - e.g. GetFlag(bit)