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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christian (Gast)


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

von Rolf Magnus (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mit strtol (oder atoi)

von gast (Gast)


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] ) ;

von Lothar M. (lkmiller) (Moderator) Benutzerseite


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 ;-)

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


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]);

von gast (Gast)


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.