Hallo, ich habe folgende Frage: Ich habe eine 4Byte große Dezimalzahl z.B. unsigned long int mit dem Wert 4283036831. Jetzt muß ich die Zahl auf der seriellen Schnittstelle ausgeben, aber Byteweise in Hex. Hat mir jemand ein Tip? Also FF 49 F4 9F Gruß Michael
unsigned long value=4283036831; unsigned char hexbyte; hexbyte = value; Send(...); hexbyte = ((unsigned long)value & 0x0000FF00) >> 8; Send(...); hexbyte = ((unsigned long)value & 0x00ff0000) >> 16; Send(...); hexbyte = ((unsigned long)value & 0xff000000) >> 24; Send(...);
Jens ist doch gar kein hebräischer Name, aber Du schreibst von rechts nach links? (-; Also lieber umgekehrt: send((unsigned char) (value >> 24)); send((unsigned char) (value >> 16)); send((unsigned char) (value >> 8)); send((unsigned char) (value)); (Merke: nur Intel fängt mit der niedrigsten Stelle an)
> Jens ist doch gar kein hebräischer Name, aber Du schreibst von > rechts nach links? Tut er doch nicht. Er schreibt von links nach rechts, was aber bei Zahlen auch im europäischen Raum eher unüblich ist.
Was genau meinst Du mit "in Hex"? Sollen die Zahlen lesbar sein? Wenn ja, dann vielleicht so: char s[15]; sprintf(s, "%02X %02X %02X %02X", (in >> 24) & 0xFF, (in >> 16) & 0xFF, (in >> 8) & 0xFF, in & 0xFF); Send(s); Alternativ selbst schreiben (falls sprintf zu viel Speicher frisst): char nibble(unsigned char v) { return (v<=9) ? (v + '0') : (v-10+'A'); } ... Send(nibble((val >> 28) & 0xF); Send(nibble((val >> 24) & 0xF); Send(nibble((val >> 20) & 0xF); ... Send(nibble((val >> 0) & 0xF); Vielleicht in einer Schleife.
bei dezimal 560731841 kommt 21 00 6c 00 raus. sollte aber 21 6c 16 c1 sein. wo ist da noch ein Fehler? Gruß Michael
char s[15]; sprintf(s, "%02X %02X %02X %02X", (in >> 24) & 0xFF, (in >> 16) & 0xFF, (in >> 8) & 0xFF, in & 0xFF); Send(s); es geht nur um die zeile mit sprintf.
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.