Geben Sie Casting struct in integer c ++ @ ei

Ich habe ein Design, bei dem Werte an bestimmten Stellen in einem 32-Bit-Wort enthalten sein müssen. Beispiel: Die Bits 10-15 müssen den Wert 9 haben, die restlichen Bits sind alle 0. Der Einfachheit halber habe ich eine Struktur erstellt, die eine aufgeschlüsselte Version der Fragen enthält.

struct {
    int part1 : 10;
    int part2 : 6;
    int part3 : 16;
} word;

Ich kann dann @ setzpart2 gleich dem gewünschten Wert sein und die anderen Teile auf 0 setzen.

word.part1 = 0; 
word.part2 = 9;
word.part3 = 0;

Ich möchte jetzt diese Struktur nehmen und in eine einzelne 32-Bit-Ganzzahl konvertieren. Ich habe es zwar kompiliert, indem ich das Casting erzwinge, aber es scheint keine sehr elegante oder sichere Art zu sein, die Daten zu konvertieren.

int x = *reinterpret_cast<int*>(&word);

Wenn ich versuche, es ganz normal zu besetzenreinterpret_cast<int>(word) Ich erhalte den folgenden Fehler:

invalid cast from type 'ClassName::<anonymous struct>' to type 'int'

Es muss einen besseren Weg geben, ich kann es einfach nicht herausfinden. Danke im Voraus

Hinweis: Muss im C ++ - Stil ausgeführt werden, da Standards und so weiter ...Augenverdrehe

Antworten auf die Frage(3)

Ihre Antwort auf die Frage