Frage

Ich möchte ein Array innerhalb eines bitgepackt Struktur haben. Ich weiß, statisch die Größe des Arrays (32), und ich würde jedes Element in der Anordnung wie ein einziges Bit zu sein. Zum Beispiel würde Ich mag, um etwas zu sagen wie:

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

Ich habe ein paar Dinge ausprobiert, aber gcc rührt sich nicht. Es wäre schön, die Lage sein, dies zu tun, damit ich sauberen Code schreiben könnte, die die Elemente in dem gepackten Array iteriert. Ideen?

War es hilfreich?

Lösung

Wenn Sie es einfach in einen (32-Bit) int, dann können Sie Iterierte über die Bits mit einem sauber for-Schleife wie folgt aus:

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

Nicht viel schwieriger zu schreiben als eine Array-Indizierung Syntax.

Wenn Sie verstecken das Bit-twiddling den Code besser lesbar machen Sie auch eine Funktion oder ein Makro verwenden, könnten die Bits zuzugreifen - z.B. GetFlag(bit)

Andere Tipps

Bitfield Mitglied Elemente Adressen nicht haben, so dass selbst wenn Sie eine Reihe von ihnen erklären könnte, gäbe es keine Möglichkeit, es zu benutzen (alle Array-Zugriff in C Pointer-Arithmetik und dereferencing). Es ist einfach, Ihre eigenen Bit-Array, um Code obwohl die Bits eines größeren Typs verwendet wird; Jason hat die Grundlagen erläutert. Im Allgemeinen sollten Sie die Verwendung bitfields vermeiden, wenn Sie einen wirklich guten Grund haben. Sie sind in der Regel mehr Mühe, als sie wert sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top