Bitoperationen mit Strukturen

Gast #302918
Lesenswert?
• ▲
▼
Hi,
mein Problem ist zwar nicht AVR-Speziell aber vielleicht kann mir ja
doch wer hier helfen.
Und zwar möchte ich zwei 16-Bit Strukturen mit einander vergleiche und
auswerten.
Dazu möchte ich sie gern zum Beispiel "verunden". Wie sieht dabei
meine Syntax aus ?
Wenn ich die komplette Struktur mit einem Hex Wert vergleichen will
mach ich es so, dass ich einen 16 Bit Zeiger darauf lege.

*((u16*)&Struktur_A) == 0x80

Die Bitstrukturen habe ich vorher definiert.

So, wie kann ich nun zb Struktur_A mit Struktur_B verunden und das
ergebnis dann einer Struktur_C zuweisen. Bzw, kann man überhaupt in
eine Bitstruktur direkt einen Wert einprägen ??

gruß Taylor
Gast #302919
Lesenswert?
• ▲
▼
Hallo Taylor!

Was ist eine 16-Bit Struktur bzw. was verstehst Du darunter?

also allgemein in C würde das für Variablen mit einem einfachen &
aussehen, also:

   VarC = VarA & VarB;

wobei VarA, VarB und VarC die Variablen sind.

Ich hoffe Dir damit weitergeholfen zu haben!

Stefan B.
Gast #302920
Lesenswert?
• ▲
▼
Hi, ja bei Variablen ist das klar, nur ich bruache das bezogen auf
Bitstrukturen.
Die Struktur sieht dann so aus:

typedef struct
{
 u16 Wert1: 1;
 u16 Wert2: 1;
 u16 Wert3: 1;
 u16 Wert4: 1;
 ... usw
}TypStruktur

Bei der Deklaration dann so:

Typstruktur Struktur_A, Struktur_B, Struktur_C;

Nun möchte ich die Strukturen_A und _B verunden und die dann Struktur_C
zuweisen.
Persönliche Seite #302921
Lesenswert?
• ▲
▼
Der einfachste Weg dazu wird die sogenannte 'union' sein.

Beispiel:
1
#include <stdio.h>
2

3
typedef struct bitfield_s
4
{
5
        unsigned flag1:1;
6
        unsigned flag2:1;
7
        unsigned flag3:1;
8
        unsigned flag4:1;
9
        unsigned flag5:1;
10
        unsigned flag6:1;
11
        unsigned flag7:1;
12
} bitfield_t;
13

14
typedef union bitsnbytes_u
15
{
16
        unsigned int val;
17
        bitfield_t bits;
18
} bitsnbytes_t;
19

20
bitsnbytes_t structA, structB, structC;
21

22
int
23
main(void)
24
{
25
        structA.bits.flag1 = 1;
26
        structB.bits.flag2 = 1;
27

28
        structC.val = structA.val | structB.val;
29

30
        printf("structC.val = %d\n", structC.val);
31

32
        return 0;
33
}
Gast #302922
Lesenswert?
• ▲
▼
stimmt... mit union legst du fest, das es entweder die eine, oder die
andere struktur sein kann (also der komplette wert der
struktur/variablen angesprochen wird oder halt eben bitweise).
so kannst du mit .val die komplette struktur vergleichen und mit .flagX
bitweise drauf zugreifen.

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.