Int Zahl in Hex umwandeln und in String konvertieren

Gast #1100084
Lesenswert?

Hallo,

ich möchte eine Integer Zahl nach Hex umwandeln, und das Ergebnis als 
String über UART übertragen.

z.B. die Zahl 2000 = 0x7D0 = "7D0"

Ich möchte also die "7D0" als String haben. Wie schafft man das? Auf 
externe Funktionen möchte ich wegen zu wenig Programmspeicher 
verzichten.

Danke!
#1100100
Lesenswert?

Hier ist eine Loesung ohne sprintf (code nicht getestet!); sprintf 
braucht ueblicherweise Unmengen Programmspeicher, weil's eben eine sehr 
flexible Funktion ist (MikroC z.B. verbraucht ca. 2 KB 
Programmspeicher). Manche compiler haben auch abgespeckte versionen. Der 
folgende Code sollte bloss ein paar Byte Assembler erzeugen:

unsigned long my_val = 2000;
signed int i;
char digit;

for (i = 28; i >= 0; i -= 4)
{
    digit = (my_val >> i) & 0x0000000f; // eine hex-Stelle extrahieren
    digit = (digit > 9) ? digit + '0' : digit + 'A' - 10; // in 
ASCII-Zeichen konvertieren
    send_char (digit); // oder was immer die UART-Funktion in Deinem 
compiler ist
}


Wolfgang
#1100663
Lesenswert?

Ja, if und else waren vertauscht. Gottseidank habe ich ja geschrieben 
"nicht getestet"; ausserdem war das natuerlich Absicht, um zu sehen, ob 
wer mitdenkt :-)

Die 28 kommt daher, dass unsigned long 32 Bits hat - d.h.. bits 0 bis 
31. Mein Code klaubt 4 Bits auf einmal heraus und macht daraus eine 
Hex-Ziffer. Und die hoechstwertigen bits sind bits 28 bis 31.

Wolfgang

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren