union, struct & Bitfelder

Gast #2194896
Lesenswert?
• ▲
▼
Hallo!

Habe eine 16bit-Integer zahl, die aus Bitmasken gebildet wird.
Das MSB ist eine Maske, das LSB wird durch zwei Bitmasken gebildet.
Nun wurde ich gern eine Union/Struct anlegen, mit deren Hilfe ich mit 
einem Datentyp auf alles Zugreifen kann.

Wie mache ich das?
1
typedef struct MyDataTypeStruct
2
{
3
  union
4
  {
5
    unsigned int Value;
6
    unsigned char VRU : 8;
7
    unsigned char HRU : 4;
8
    unsigned char LRU : 4;
9
 }
10
} MyDataType;

Funktioniert irgendwie nicht.

Danke für eure Hilfe.

Gruß
Rufus
Gast #2194907
Lesenswert?
• ▲
▼
Alle deine Elemente werden auf den selben Speicher abgebildet. LRU ist 
das Selbe wie HRU.

Du musst deine xRU's in einer struct zusammenfassen (am besten noch 
gepackt) und diese dann mit Value in eine union stecken.

Das kann funktionieren, muss es aber nicht.
Gast #2194966
Lesenswert?
• ▲
▼
Also quasi so:
1
typedef struct MyDataTypeMaskStruct
2
{
3
    unsigned char VRU : 8;
4
    unsigned char HRU : 4;
5
    unsigned char LRU : 4;
6
} MyDataTypeMask;
7

8
union
9
{
10
  unsigned int Value;
11
  MyDataTypeMask mask;
12
} MyDataType;

Und das passt dann auch mit der Maskierung?

Gruß
Rufus
Gast #2195013
Lesenswert?
• ▲
▼
Rufus schrieb:
> Und das passt dann auch mit der Maskierung?

Es kann paasen, oder auch nicht. Was da genau rauskommt, kann der 
Compiler selbst entscheiden, und es hängt auch vom Prozessor ab. 
Eigentlich ist es in C verboten, ein anderes Union-Element zu lesen, als 
das, in das man als letztes geschrieben hat. Dazu kommen dann noch 
prozesorspezifisches Aligment, Padding und die Größen der Datentypen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.