PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zerlegung



luma
21.10.2005, 14:04
Hio. Kleine Frage: Wie kann ich z. B. ein Byte in seine Bits zerlegen oder wie kann ich z. B. eine Variable vom Typ uint32_t in seine einzelnen Bits/Bytes zerlegen? D. h. ich muss an jedes einzelne Bit/Byte eines Bytes/... kommen. Hätte mir vielleicht jemand ein Beispiel? Wäre sehr dankbar dafür.

Gruß
Lutz

Grusim
21.10.2005, 15:00
Also unter den mesiten Hochsprachen geht das mit Maskieren. Du nimmst dein Byte und machst dazu ein AND mit dem Bitwert. So kann man auch mehrere Bits gleichzeitig prüfen.

Beispiele:
01001011 = 75

mit AND 1 (00000001) gibt es ein True zurück da die 1 gesetzt ist.
mit AND 4 (00000100) gibt es ein False zurück da die 4 nicht gesetzt ist.

Im Code wäre das dann eine einfache IF-Abfrage (VB zB)
IF byte AND wert THEN mache etwas

SprinterSB
21.10.2005, 15:12
So was?

typedef union
{
uint32_t l;
uint8_t b[4];
struct
{
unsigned int bit0:1;
unsigned int bit1:1;
unsigned int bit2:1;
...
};
} blah_t;

blah_t foo (blah_t blah)
{
blah.bit2 = 0;

if (blah.bit0)
blah.b[3] = 0;

return blah;
}

Indirekter Zugriff auf die Elemente eines Bitfeldes gehen nicht. Wenn du das haben willst, musst du selber rumfummeln.

::Edit::

Zu beachten ist dabei noch, daß es sich dabei um GNU-C handelt. Andere C-Compiler verschlucken sich evtl an dem anonyman struct. In diesem Falls einfach einen Namen vergeben, dann sind aber die Zugriffe lästiger.

Für so was kann man auch Initializer schreiben. Beim Initialisieren des Anonymous muß der aber ganz vorne stehen im typedef.

blah_t blubb =
{
{
.bit2 = 1
},
.b[3] = 4
};