Hi, möchte bei meinem ATmega32 den EPROM per Uart beschreiben. Dazu sende ich als erstes dass Zeichen per Putty. Anschließend sende ich die Adresse im ASCII Format. Jetzt muss ich aus der ASCII Zahl eine DECIMAL Zahl machen, da ich ja mit der Zahl "1" die erste Stelle im EPROM beschreiben möchte und nicht die 49. Das ganze würde ich mit einer Switch schleife machen. Nun habe ich das Problem dass der EPROM bis zu 1024 Byte speichern kann, dass heißt ich habe vier Ziffern die ich in einem Array speichere und in der Switch Schleife umwandele, jetzt will ich aber nur noch eine 16bit variable zurück bekommen also im Endeffekt so: FLAGC[0] = 0 FLAGC[1] = 5 FLAGC[2] = 7 FLAGC[3] = 0 Aus diesen vier Ziffern soll FLAGD = 570 enstehen. Wie kann ich das machen? Oder kennt ihr eine Bessere Möglichkeit? mfg Umbrecht
Umbrecht schrieb: > Oder kennt ihr eine Bessere > Möglichkeit? ja, atoi http://www.cplusplus.com/reference/cstdlib/atoi/
Hallo, die Ziffern 0..9 entsprechen den ASCII-Codes 48..57. Wenn Du also von den Zeichen jeweils 48 abziehst, bekommst Du jede Stelle als Dezimal. In Deinem Fall:
1 | uint16_t u16_dez = 0; |
2 | |
3 | u16_dez = 1000 * (FLAGC[0] - 48) + |
4 | 100 * (FLAGC[1] - 48) + |
5 | 10 * (FLAGC[2] - 48) + |
6 | 1 * (FLAGC[3]-48); |
hi, @guest : funktioniert, danke @Peter ||: werde ich dann auch mal testen vielen dank für die schnelle Hilfe - Problem gelöst mfg Umbrecht
Umbrecht schrieb: > da ich ja mit der Zahl "1" die > erste Stelle im EPROM beschreiben möchte und nicht die 49. Sicher? Ich würde die erste Stelle im EPROM mit 0 addressieren, nicht mit 1. Ggf musst du dann bei den obigen berechnungen noch 1 addieren oder abziehen.
Hi Macht es Euch doch nicht immer so kompliziert. Die Berechnung stimmt und die 48 für das Zeichen der Null auch. Man kann aber im Code auch die "0" oder die '0' abziehen - der Compiler macht daraus eine 48. Somit ist auch in einigen Wochen der Code noch lesbar, da man sieht, daß von dem ASCII-Wert der Zeichenwert der '0' abgezogen wird. (oder 0x30 als Hex - schön zu sehen ist die letzte Ziffer, ebenfalls eine Null - klappt bis zur 0x39 für die '9'. Bis zum A sind es noch 7 weitere Schritte, für das 'A' einer HEX-Zahl also weitere 7 abziehen und aus der 65 oder 0x41 wird eine 10 - damit gehen dann auch Hexadezimal-Zahlen) Damit kannst Du pro Stelle die Ziffer einlesen, umrechnen und entsprechend potenziert auf das Ergebnis aufaddieren. Der Code oben ist korrekt und macht Nichts Anderes, als von mir angedacht, nur sieht man in der "48" nicht wirklich direkt eine "0". MfG
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.