Hallo, folgendes Problem: Habe 2 uint8_t Variablen a,b und eine uint16_t Variable c möchte gerne das HB Variable a ist un das LB Variable b Ansatz : c = a; // a ins LB von c schreiben c << 8; // Inhalt von c 8 Bits nach links schieben in HB von c c = b; // b ins LB von c schreiben c sollte jetzt HB a und LB b haben. Aber genau das passiert nicht ! Hab im HB immer 0 stehen. Habe schon anderes geschoben mit und ohne Zuweisung, aber ich verzweifel gerade an so einer Kleinigkeit *nerv. Andres herum aus einem uint16_t HB und LB auslesen, hab ich schon hinbekommen, aber das andere *verzweifel. Danke im vorraus Gruß Thorsten
c = a; // a ins LB von c schreiben c << 8; // Inhalt von c 8 Bits nach links schieben in HB von c c |= b; // b ins LB von c schreiben
jo danke ! Klappt ! Also wenn ich an so was schon verzweifel*g Gruß Thorsten
Die Schieberei um 8 kannst Du Dir sparen.
#define lo 0 //low oder high hängt von little oder big-Endian ab
#define hi 1
union x{
unsigned char b[2];
unsigned int w;}
Zugriff auf bytes:
x.b[lo]
x.b[hi]
Zugriff auf word:
x.w
Denkanstöße, Anregungen:
Habe es bisher noch nicht geschafft, sowas wie x.bl und x.bh (ohne
Arrayzugriff) zu formulieren. Evtl. geht das mit einem zusätzlichen
struct oder mit der Bitzuordnung :8??
union x{
unsigned char a,b:8; //geht nicht, a und b haben die selbe Adr.
unsigned int w;}
mit Pointern könnte es auch gehen:
unsigned int *x;
Zugriff auf Bytes:
*(x) und *(x+1) aber *(x+1) greift aber auf das nächste Word zu,
da der Compiler automatisch mit 2 skaliert
Also doch mit der Union und *(x.a) und *(x.a+1)??
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.