Sie haben zwei 16-Bit-Abschnitte gibt (die ersten drei Felder und die letzten drei Felder sind 16 Bit).
Das sind nur 65536 Einträge. So haben Sie eine Nachschlagetabelle, die die Bit-umgekehrte Version der Felder enthält. Umbrechen Sie die Struktur in eine Union mit einer anderen Struktur, die zwei 16-Bit-Felder hat, um dies zu erleichtern?
So etwas (nicht getestet, ich bin nicht in der Nähe eines C-Compiler):
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];
}
Population der Lookup-Tabelle links als Übung für den Leser :)
jedoch Compiler doc lesen vorsichtig. Ich bin mir nicht sicher, ob der C-Standard erfordert, dass diese Struktur in ein Wort passt (obwohl ich davon ausgehen würde, dass die meisten Compiler das tun).
Ihre Frage war genug, um meine Frage zu etwas getrennt zu beantworten - danke! :) – Cyrus