mikrocontroller.net

Forum: Compiler & IDEs Umwandlung eines Char-Arrays in eine Zahl


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes Problem:

über den UART empfange ich einen String, der dann in ein Char-Array 
gespeichert wird. Die empfangenen Zeichen sind Ziffern, die ich als Zahl 
brauche. Wie mache ich das in C?

Vielen Dank für eure Hilfe!

Gruß, Christian

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit strtol (oder atoi)

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder selbst rechnen

in jedem element des arrays  steht auch nur von 0x00 bis 0xff was drin
mit atoi gehts aber


zahl = atoi(  array[index] ) ;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> mit atoi gehts aber
> zahl = atoi(  array[index] ) ;

Was kommt denn dann heraus, wenn array = {'1','2','3','4',0} ist?
Resultat:
index = 0 --> zahl = 1234
index = 1 --> zahl = 234
index = 2 --> zahl = 34
index = 3 --> zahl = 4
Und weiter?

Und was kommt heraus, wenn array = {'1','2','3','4','5'} ist?
Ja, jetzt wirds so richtig spannend, nicht wahr?


Zurück zum Thema:
Ein String ist in C ein char-Array, das mit einer NULL ( = 0x00 = 0) 
abgeschlossen ist. Alle Stringoperationen erwarten so ein mit Null 
terminiertes char-Array. Wenn die Null fehlt, arbeiten sich die meisten 
Funktionen einfach soweit durch den Speicher, bis irgendwo eine Null 
auftaucht (die Chancen dafür stehen bei 1:255 ;-)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> zahl = atoi(  array[index] ) ;

Nein.

atoi erwartet einen Pointer auf char, nicht einen char.

Also:
zahl = atoi(array);
oder, wenn Zeichen darin übersprungen werden sollen:
zahl = atoi(array + 1);
was sich auch umständlicher schreiben lässt als
zahl = atoi(&array[1]);

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stimmt ... ich vergaß ....  sry -.-

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.