16 bit Zahlen umwandeln

Gast #106843
Lesenswert?
• ▲
▼
Hallo,

Ich möchte im PC in einem C-Programm eine integer-dezimal-Zahl mit
einem Wertebereich von -32000 bis +32000 so zerlegen, dass ich zwei
bytes (highbyte und lowbyte) erhalte, die die Zahl im Zweierkomplement
darstellen.Wie wandele ich das in C am elegantesten um??

Die so "berechneten" bytes sende ich anschließend per UART an den
AVR.
Im AVR möchte ich das aus Platzgründen nicht berechnen.

Danke für alle Tips!!!

Peter.
Gast #106844
Lesenswert?
• ▲
▼
Hallo Peter

in welcher Form hast Du denn Deine integer-dezimal-Zahl ? Ist das ein
String ? dann kannste mit atoi() den integer berechnen !
Oder liegt die zahl schon als Hexzahl vor, die nur als Dezimalzahl
angezeigt wird ?

Gerhard
Gast #106845
Lesenswert?
• ▲
▼
Ich glaub das geht so:

int word = 0xfeda; (Beispiel)

word_copy = word; (Kopie für später)

word &= 0xff; (blende die unteren 8 Bit aus; Ergebnis = 0xfe00)
word = word >> 8; (Ergebnis = 0x00fe)
unsigned char high_byte = word; (Jetzt müsste 0xfe im low_byte stehen)

word_copy &= 0xff00 (blende die oberen 8 Bit aus; Ergebnis = 0x00da)
unsigned char low_byte = word_copy;

So oder so ähnlich habe ich das gemacht.
Dirk.
Gast #106846
Lesenswert?
• ▲
▼
Hallo,

Du kannst es auch über eine Union machen, mit der Du wahlweise auf das
High- oder Lowbyte zugreifst, oder direkt auf den Integerwert. Hierbei
musst Du nur auf das Format achten (Motorola/Intel), falls es da bei
dir Unterschiede gibt.

Viele Grüße,

Ralf

www.ralf-hochhausen.de
Gast #106848
Lesenswert?
• ▲
▼
Hallo zusammen,

erstmal vielen dank für die Tipps!

die bytes (highbyte und lowbyte) zu trennen ist die eine Sache. Wie
bekomme ich das aber so hin dass ich das Zweierkomplement habe???

Ich weiß nicht mehr weiter, habe schon so vieles ausprobiert...

Danke nochmals,

Peter.

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.