si hanno due sezioni 16 bit là (i primi tre campi e gli ultimi tre campi sono 16 bit).
Sono solo 65536 voci. Quindi avere una tabella di ricerca che contiene la versione bit-invertita dei campi. Avvolgi la struttura in un'unione con un'altra struttura che ha due campi a 16 bit per semplificare la procedura?
Qualcosa di simile (non testata, io non sono in prossimità di un compilatore 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];
}
Popolazione della tabella di ricerca lasciato come esercizio per il lettore :)
Tuttavia, leggere il tuo doc compilatore accuratamente. Non sono sicuro che lo standard C richieda che la struttura tenga conto di una parola (anche se mi aspetterei che molti compilatori lo facciano).
fonte
2009-04-07 07:03:16
La tua domanda è stata sufficiente per rispondere alla mia domanda riguardante qualcosa di separato - grazie! :) – Cyrus