Gast
#346225
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.
|
Anzeige
|
2 mal 8bit zu 2byte
Gast
#346225
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.
Gast
#346226
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.
Gast
#346227
Wollte gerade sagen, eigentlich müsste das so gehen
Gast
#346228
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.
Gast
#346229
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.
Gast
#346230
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
Gast
#346231
Bei der Union muß dann aber auf die Reihenfolge der Bytes bei der Definition achten, oder?
Gast
#346232
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 Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|