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.
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
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.
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
unsigned char lowbyte, highbyte; int zahl; lowbyte = zahl & 0xff; highbyte = zahl >> 8;
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.
Das Zweierkomplement ist Bitinverse + 1 also z.B. -1 = FE + 1 = FF -2 = FD + 1 = FE Gerhard
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.