Hallo,
ich möchte in C eine Zahl von hex in Dec umwandeln, wobei der numerische
Wert gleich bleiben soll, also keine normale Konvertierung.
Ich möchte also aus 32112345dec eine 0x32112345 machen.
Ich finde ein paar Beispiele im internet, die wandeln aber in string um
was auf meinem msp430 nicht klappt, ich habe den Datentyp string hier
nicht. evt. mit char[], aber die länge wäre in meinem Fall hier stets
anders.
Ursprünglich wollte ich die max. 4 Byte große Zahl in einzelen Bytes
zerlegen und mit 16 multiplizieren. Beim kleinesten Byte klappt das
halbwegs, zumindest bis ich bis 100d komme, dann scheitert es "irgendwo"
am Überlauf...
1 | 45d = 0x2D
|
2 | 0x2D / 0x0A = 4 // ermittle Anzahl Überlauf von einer auf zehner
|
3 | 4 * 6 = 24d // Anzahl Überlauf * differenz Überlauf (0x10 - 10dec = 6dec)
|
4 | 24d + 45d = 69d == 0x45 // Wert Überlauf + eigentliche Wert (Einer)
|
5 |
|
6 | Das funktioniert bis 99d
|
7 | 99d = 0x63
|
8 | 0x63 / 0x0A = 9
|
9 | 9 * 6 = 54d
|
10 | 54d + 99d = 153d == 0x99
|
11 |
|
12 |
|
13 | ab 100d funktiert es nicht mehr
|
14 | 100d = 0x64
|
15 | 0x64 / 0x0A = 10
|
16 | 10 * 6 = 60d
|
17 | 60d + 100d = 160d == 0xA0 / hier sollte 0x100 stehen!
|
18 |
|
19 |
|
20 | 245d = 0xF5
|
21 | 0xF5 / 0x0A = 24d
|
22 | 24 * 6 = 144d
|
23 | 144d + 245d = 389d == 0x185 / hier sollte 0x245 stehen
|
Mir ist klar, dass der Fehler im Beispiel oben in Zeile 15+16 bzw. 21+22
liegt. Aber ich verstehe nicht wie ich hier die zweite Stelle des
Überlaufs verrechnen muss. Vlt. kann mir jemand von Euch einen Tipp
geben!?