Pregunta

Me gustaría tener un interior conjunto de una estructura de empaquetamiento de bits. I estáticamente saber el tamaño de la matriz (32), y me gustaría cada elemento de la matriz a ser un único bit. Por ejemplo, me gustaría ser capaz de decir algo como:

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

he intentado un par de cosas, pero gcc no se mueve. Sería bueno para ser capaz de hacer esto por lo que podría escribir código limpio que itera sobre los elementos de la matriz de relleno. Ideas?

¿Fue útil?

Solución

Si sólo tiene que poner en un int (32 bits), entonces usted puede limpiamente iterar sobre los bits con un bucle de esta manera:

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

No es mucho más difícil de escribir de una sintaxis de matrices de indexación.

Si desea ocultar el bit-haciendo girar para hacer el código más legible, incluso se puede utilizar una función o macro para acceder a los bits - por ejemplo, GetFlag(bit)

Otros consejos

Elementos miembros

campo de bits no tienen direcciones, por lo que incluso si se puede declarar una matriz de ellos, no habría manera de usarlo (todo el acceso a una matriz en C es la aritmética de punteros y eliminación de referencias). Es fácil de su propio código de matriz de bits utilizando los bits de un tipo más grande sin embargo; Jason ha explicado los conceptos básicos. En general, se debe evitar el uso de campos de bits a menos que tenga una muy buena razón. Son por lo general más problemas de lo que valen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top