Forum: Compiler & IDEs Bitfeld-Array -> Problem mit Struct


von lightninglord (Gast)


Lesenswert?

Hallo zusammen,

ich hab ein kleines Problem: Ich möchte ein paar Daten in einem 
Nibble-Array Packen und habe versucht das ganze per struct in eine 
Variable zu Packen:
1
struct _DataP
2
{
3
  U8     deviceID;
4
  unsigned char   Sign:4;
5
  unsigned char  Norm:4;
6
  unsigned char  Data[8]:4;  // 8 Nibble die man so ansprechen kan DataP.Data[0-7] 
7
8
9
}DataP;

jetzt meckert aber mein GCC mit "bitfield 'Data' has invalied typ"

Ich muss aber die Nibble einzeiln per Variable auslesen können zb 
DataP.Data[i].

Gibts da noch ne andere möglichkeit?

Was passiert eigentlich wenn ich ein Nibble mit so einem Inhalt 0b0001 
nach rechts shifte? Wird die 1 dann ins nächste Nibble geschoben oder 
wird der Nibble einfach 0x00?

grüßle

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Über Biffelder kann man keine Arrays bilden. Man kann auch keine Adresse 
eines Bitfelds bilden.

Johann

von Markus Jung (Gast)


Lesenswert?

..aber du könntest ein array eines bitfeld structes anlegen...

und warum machst du dieses nicht so:
struct _Nibble
{
    uint8_t      nibble:4;
}Nibble;

struct _DataP
{
  U8     deviceID;
  unsigned char   Sign:4,
                  Norm:4;
  Nibble          Data[8];  // 8 Nibble die man so ansprechen kan
}DataP;

von (prx) A. K. (prx)


Lesenswert?

Bringt aber nix, weil es keine halben Bytes als struct gibt.

von Daniel G. (motello)


Lesenswert?

da bleibt dir wohl nichts anderes übrig als zu maskieren und zu 
schieben:

char byte;
höherwertiges nibble: (byte >> 4)
niederwertiges nibble: (byte & 0xf)

oder halt gleich alle nibbles einzeln in einem char-array speichern.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.