usted tiene dos secciones de 16 bits allí (los tres primeros campos y los tres últimos campos son de 16 bits).
Eso es sólo 65536 entradas. Entonces, tenga una tabla de búsqueda que contenga la versión invertida de bit de los campos. Ajustar la estructura en una unión con otra estructura que tiene dos campos de 16 bits para hacer esto más fácil?
Algo así (no probado, no estoy cerca de un compilador de C):
union u {
struct {
unsigned int b1:1;
unsigned int b2:8;
unsigned int b3:7;
unsigned int b4:8;
unsigned int b5:7;
unsigned int b6:1;
} bits;
struct {
uint16 first;
uint16 second;
} words
} ;
unit16 lookup[65536];
/* swap architectures */
void swapbits (union u *p)
{
p->words.first = lookup[p->words.first];
p->words.second = lookup[p->words.second];
}
Población de la tabla de búsqueda deja como ejercicio para el lector :)
Sin embargo, leer el documento compilador cuidadosamente. No estoy seguro si el estándar C requiere que struct se ajuste a una palabra (aunque espero que la mayoría de los compiladores lo hagan).
Tu pregunta fue suficiente para responder mi pregunta sobre algo separado, ¡gracias! :) – Cyrus