Ich habe eine Struktur vom folgenden Typ
typedef struct
{
unsigned int a : 8;
unsigned int b : 6;
unsigned int c : 2;
}x, *ptr;
Was ich tun möchte, ist den Wert des Feldes c zu ändern.
Ich mache etwas Ähnliches wie das Folgende
x Struktur = { 0 };
x->c = 1;
Wenn ich mir die Speicherkarte anschaue, erwarte ich 00 01 zu finden, aber stattdessen finde ich 00 40. Es scheint, dass beim Anordnen des zweiten Bytes das c-Feld in die niedrigsten Bits und das b-Feld in die höchsten Bits gestellt wird. Ich habe dies bei beiden GCC- und Windows-Compilern gesehen.
Bis jetzt mache ich das Folgende, was gut funktioniert.
unsigned char ptr2 = (unsigned char*) ptr
*(ptr2 + 1) &= 0xFC
*(ptr2 + 1) |= 0x01
Schaue ich mir die Speicherkarte falsch an? Vielen Dank für deine Hilfe.