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.