www.mikrocontroller.net

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


Autor: tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: MasterFX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wollte gerade sagen, eigentlich müsste das so gehen
unsigned char H8=0x45, L8=0xAB;
unsigned int a16=0;

a16 = (H8<<8) | L8;

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Konrad Heisig (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

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

Autor: Konrad Heisig (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.