Forum: Mikrocontroller und Digitale Elektronik 16 bit Zahlen umwandeln


von Peter (Gast)


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.

von Gerhard Gunzelmann (Gast)


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

von Dirk (Gast)


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.

von ralf (Gast)


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

von Thorsten (Gast)


Lesenswert?

unsigned char lowbyte, highbyte;
int zahl;

lowbyte = zahl & 0xff;
highbyte = zahl >> 8;

von Peter (Gast)


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.

von Gerhard Gunzelmann (Gast)


Lesenswert?

Das Zweierkomplement ist Bitinverse + 1

also z.B.
-1 = FE + 1 = FF
-2 = FD + 1 = FE


Gerhard

von Peter (Gast)


Lesenswert?

Hallo Gerhard, hallo Thorsten,

Danke für eure beiden Tips!! Es klappt nun so wie ich es wollte!!


Tausend Dank!!

Peter.

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.