Ausgabe als hex-Wert

#2372383
Lesenswert?

Die printf-Funktionen brauchen viel Code und sind relativ langsam.

Jens schrieb:
> Wie könnte ich es mit itoa() machen? Wäre das schneller, oder besser?

Doku lesen: http://www.nongnu.org/avr-libc/user-manual/index.html

itoa() liefert soviele Stellen, wie nötig.
Ggf. musst du halt auf deine 4 Stellen auffüllen.

Dafür ist itoa() sehr sparsam im Vergleich zu snprintf().
Wenn du in deinem Programm aber eh die printf-Dinger brauchst, kannst du 
sie hier auch gleich verwenden. Von der zweiten Verwendung an blähen sie 
das Programm ja nicht mehr weiter auf
Gast #2375745
Lesenswert?

Hallo,
könnte wer von euch mal drüberschauen, ob der Code so in Ordnung ist?
DANKE!

Gegeben Integervariable value;
1
unsigned int valueL, valueH;
2
unsigned char nibble1;
3
unsigned char nibble2;
4
unsigned char nibble3;
5
unsigned char nibble4;
6
unsigned char hextable[] = { '0','1','2'.
7
                             '3','4','5'.
8
                             '6','7','8',
9
                             '9','A','B',
10
                             'D'.'E','F', };
11

12
valueL = value;
13
valueH = value >> 8;
14

15

16
nibble1 = hextable[ ( valueH & 0xF0 ) >> 4) ];
17
nibble2 = hextable[ ( valueH & 0x0F) ];
18
nibble3 = hextable[ ( valueL & 0xF0 ) >> 4) ];
19
nibble4 = hextable[ ( valueL & 0x0F) ];
20

21
putchar(nibble1); putchar(nibble2);putchar(nibble3); putchar(nibble4);
#2375942
Lesenswert?

irgendwo hatte ich sowas gefunden:
1
unsigned char nibble;
2
unsigned char hex0,hex1;
3
  
4
    nibble = (data & 0xf0) >> 4;
5
    hex0 = (nibble < 10) ? ('0' + nibble) : ('a' + nibble - 10);
6
 
7
    nibble = (data & 0x0f);
8
    hex1 = (nibble < 10) ? ('0' + nibble) : ('a' + nibble - 10);

Holger

edit: auch hier könnte das erste maskieren entfallen

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