Zwei 8bit in eine 16bit Variable

OP #567638
Lesenswert?
• ▲
▼
Hallo Leute,
programmiere jetzt unter C eine Schrittmotorsteuerung über den I2C-Bus.
Jetzt wird über den BUS die anzahl der Schritte übermittelt. Die Anzahl 
werden in zwei Variablen abgespeichert (STEPS_L und STEPS_H). So sind 
also mit einem mal bis zu 2^16 Schritte möglich. Jetzt möchte ich die 
zwei 8bit-Variablen in einer 16bit-Variable (STEPS) zusammenfassen. Wie 
mache ich das?

MfG
Muecke
#567691
Lesenswert?
• ▲
▼
union Steps {
   unsigned short steps
   struct _StepsB {
      unsigned char StepsL;
      unsigned char StepsH;
   } StepsB;
};

Steps SchrittVar;

SchrittVar.StepB.StepsL = STEPS_L;
SchrittVar.StepB.StepsH = STEPS_H;

// SchrittVar.steps enthält den 16-Bit-Wert

Für uint_*t kannst Du das selbst anpassen...
Persönliche Seite #567717
Lesenswert?
• ▲
▼
Es sei darauf hingewiesen, daß es implementierungsabhängig ist, in 
welcher Reihenfolge die beiden Bytes der Union im 16-Bit-Wert landen.
(Stichwort: Endianness)

Es ist also gut möglich, daß die von Uhu vorgeschlagene Union-Variante 
auf einem Prozessor/mit einem Compiler andere Ergebnisse liefert als auf 
einem anderen Prozessor/mit einem anderen Compiler.

Beispielsweise legen Prozessoren der 68xx-Reihe von Motorola/Freescale 
den 16-Bit-Wert 0x1234 als im Speicher aufeinanderfolgende Bytes mit den 
Werten 0x12 0x34 ab, während Prozessoren der 80xx-Reihe von Intel (das 
schließt auch Z80 ein) den Wert als 0x34 0x12 im Speicher ablegen.

So würde ein C-Programm mit Union auf einem HC11 ein anderes Ergebnis 
als auf einem 8080 liefern, während die Shift-Or-Variante sich auf 
beiden Prozessoren
gleich verhält.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.