Hi,
ich will unter anderem mit dem atmega1281 einen char in eine
hex-darstellung überführen. Das Problem ist im Moment, dass größere
Werte (z.B.: 161, 0xA1) nicht richtig angezeigt werden. Für das
höherwertige Nibbel bekomme ich so als Dezimalzahl 251 (sollte 10 = A
sein) und für das zweite 241 (sollte 1 sein), welche ich natürlich nicht
in eine einzelne hex-Zahl (0-F) umrechnen kann. ist das msb nicht '1'
klappt die Umrechnung.
Was hab ich falsch gemacht?
1 | char buf = ConfigurationFrame[i-1];
|
2 | char HexArray[2];
|
3 |
|
4 | int NumWert = (int) buf;
|
5 | int LowNum = NumWert % 16;
|
6 | int HighNum = (NumWert - LowNum) / 16;
|
7 |
|
8 | if(HighNum >= 0 && HighNum < 10)
|
9 | {
|
10 | HexArray[0] = (char) (HighNum + 48);
|
11 | }
|
12 | else if (LowNum > 9 && LowNum < 16)
|
13 | {
|
14 | HexArray[0] = (char) (HighNum + 55);
|
15 | }
|
16 | else
|
17 | {
|
18 | HexArray[0] = 'X'; // Fehler beim Umrechnen
|
19 | }
|
20 | if(LowNum >= 0 && LowNum < 10)
|
21 | {
|
22 | HexArray[1] = (char) (LowNum + 48);
|
23 | }
|
24 | else if (LowNum > 9 && LowNum < 16)
|
25 | {
|
26 | HexArray[1] = (char) (LowNum + 55);
|
27 | }
|
28 | else
|
29 | {
|
30 | HexArray[1] = 'X'; // Fehler beim Umrechnen
|
31 | }
|
32 |
|
33 | write_uart0(HexArray[0]);
|
34 | write_uart0(HexArray[1]);
|
35 | write_uart0(' ');
|
36 |
|
37 | write_uart1(HighNum);
|
38 | write_uart1(LowNum);
|
39 | write_uart1(buf);
|
Ausgeben lass ich über den einen UART den Hex-Wert wie er nachher
angezeigt werden soll. Über UART1 gebe ich als Integer die erste und
zweite hex-Zahl und das ursprüngliche char aus.
Ausgabe UART0: 0xXX
Ausgabe UART1: 251,241,161
Danke!