Steven schrieb:
> DisplayData[16-i] = (temp>>((i*4)&0x0F)) + 48;
Das hier kann sowieso schon mal nicht stimmen.
Denn ein Hex-Digit umfasst nun mal die Werte 0 bis 9 und A bis F. Die
Character Darstellung davon ist aber in keinem COdesystem der Welt so,
dass genau diese Zeichen hintereinander im Code liegen.
Also kann das schon mal nicht passen.
Die Antwort ist, wie so oft, im Prinzip teile und herrsche:
Schreib dir eine Funktion, die dir von EINEM Byte die beiden Character
in eine bestimmte Position in einen String schreibt.
und dann benutzt du diese Funktion eben n mal um dir die Hex-Darstellung
für einen Datentyp mit n Bytes generieren zu lassen.
Immer diese 'ich pack alles in eine einzige Funktion Rundumschläge.
Öfter als einem lieb ist, schiesst man sich damit nur ins Knie.
Also. Wie sieht eine Funktion aus, die ein Hex-Digit lesbar konvertiert?
1 | char DigitToASCII( unsigned char value )
|
2 | {
|
3 | value &= 0x0F; // sicherheitshalber
|
4 | if( value <= 9 )
|
5 | return value + '0';
|
6 |
|
7 | return value - 10 + 'A';
|
8 | }
|
darauf aufbauend: wie sieht eine Funktion aus, die die beiden Character
für 1 Byte bestimmt und in einen String schiebt?
1 | void ByteToASCII( char* str, unsigned char value )
|
2 | {
|
3 | *str = DigitToASCII( value >> 4 ); // oberes Nibble
|
4 | *(str+1) = DigitToASCII( value ); // unteres Nibble
|
5 | }
|
nachdem du einzelne Bytes konvertieren kannst, wie sieht eine Funktion
aus, die zb einen int (16 Bit int) konvertiert
1 | void IntToASCII( char* str, unsigned int value )
|
2 | {
|
3 | ByteToASCII( str, value >> 8 ); // oberes Byte
|
4 | ByteToASCII( str + 2, value ); // unteres Byte
|
5 | }
|
war irgendwas davon schwierig?
Nein. Eines folgt aus dem anderen, wenn man nicht immer gleich mit dem
Kopf durch die Wand will, sondern die Dinge systematisch von einfach in
Richtung 'immer komplexer' aufbaut.