ASCII eins zu Decimal eins

Gast #5002876
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
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.