Forum: Mikrocontroller und Digitale Elektronik 2 mal 8bit zu 2byte


von tim (Gast)


Lesenswert?

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.

von johnny.m (Gast)


Lesenswert?

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.

von MasterFX (Gast)


Lesenswert?

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;

von johnny.m (Gast)


Lesenswert?

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.

von Benedikt (Gast)


Lesenswert?

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.

von Konrad Heisig (Gast)


Lesenswert?

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

von Rahul (Gast)


Lesenswert?

Bei der Union muß dann aber auf die Reihenfolge der Bytes bei der
Definition achten, oder?

von Konrad Heisig (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.