mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hexzahlen


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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(...);

Autor: Philipp Sªsse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens,

vielen Dank, werde ich gleich ausprobieren.

Gruß Michael

Autor: Florian D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei dezimal 560731841 kommt 21 00 6c 00 raus.
sollte aber 21 6c 16 c1 sein.

wo ist da noch ein Fehler?

Gruß Michael

Autor: Karl heinz Buchegger (heinzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwo in Deinem Code.
Da wir aber nicht wissen wie Dein Code aussieht ....

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(int)((in >> 24) & 0xFF)

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das wars.

vielen Dank für die Hilfe.

Gruß Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.