hi, wie kann ich 2 1byte werte zu einem 2byte wert zusammenfassen in c? ich versucht zunächst eine variable zu einem integer wert zu casten, aber die verschiebung nach links klappt nicht.
unsigned char aH8, aL8; unsigned int a16; a16 = (unsigned int)aL8 + (unsigned int)(aH8 << 8); sollte funktionieren. Dürfte aber auch ohne die casts klappen.
Wollte gerade sagen, eigentlich müsste das so gehen
1 | unsigned char H8=0x45, L8=0xAB; |
2 | unsigned int a16=0; |
3 | |
4 | a16 = (H8<<8) | L8; |
Ja, ist im Prinzip ne andere Schreibweise für die selbe Sache (und funktioniert tatsächlich auch ohne Casts, habs ausprobiert). Allerdings erzeugt die Variante mit | mehr Code (erstaunlicherweise). Und in meinem ersten Posting war auch noch ein Fehler drin (Klammer verrutscht). Muss natürlich heißen a16 = (unsigned int)aL8 + ((unsigned int)aH8 << 8); Der Typecast muss natürlich vor dem Shift gemacht werden. Aber da es auch ohne funktioniert, isses eh egal.
Ohne cast funktioniert das nicht immer ! Bei AVR GCC ja, beim Renesas Compiler nicht, denn der schiebt ein Byte wirklich nur als Byte und da kommt dann also 0 raus.
Noch einfacher geht das alles, wenn man sich eine UNION-Struktur definiert, so dass man wahlweise auf das ganze Word oder die einzelnen Bytes der Variablen zugreifen kann. Dann sind auch keine Schiebeoperationen mehr erforderlich. Gruß Konrad
Bei der Union muß dann aber auf die Reihenfolge der Bytes bei der Definition achten, oder?
Das ist richtig, aber sollte doch kein Problem sein - man gibt ihnen halt aussagekräftige Namen. Ich hab mir dafür irgendwann mal ne eigene .h angelegt. Gruß Konrad
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.