ASCII eins zu Decimal eins

Gast #5002876
Lesenswert?

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
Gast #5002900
Lesenswert?

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);
#5005044
Lesenswert?

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

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