atoi macht char 2-fach?

Gast #2752636
Hallo,
ich sende über einen Interrupt einen String zu meinem Programm, dadurch 
soll eine Anzahl an Kanälen definiert werden, da diese Anzahl der Kanäle 
über 9 ist, sende ich 2 Stellen, die ich dann aufaddiere (siehe unten:
Interrupt-Routine:
uart_string ist: "X53Z", bei Z wird die Routine aufgerufen...
1
   channels = 0;
2
   int chan1= atoi(&uart_string[1]);
3
   int chan2= atoi(&uart_string[2]);
4
   channels= chan1*10;//umrechnen der 2 Strings auf eine 2-stellig
5
   channels= channels + chan2;
--> ich habe nun das Problem, dass für chan2 immer der String 2 mal 
kommt, es steht dann also 33 drin

somit wird als Wert für Channel 533 berechnet, es sollte aber 53 sein

Gruß
Dirk
Gast #2752655
Ein string MUß aber mit einer 0 terminiert werden.
Mach aus dem 'Z' eine 0 also eine char a=0; nicht char a='0'.
Dann funktioniert die funktion atoi auch.

  uart_string[3]=0;
  channels = atoi(&uart_string[1]);
Gast #2752677
Hallo,
nun hab ich aber doch ein Verständnisproblem, ich habe doch den "char 
uart_String[]" mit insgesamt 4 Stellen, uart_string[0] bis ..[3] Inhalt 
ist X50Z, jetzt dachte ich (ich komm von Java..) uart_string[0] = X 
uart_string[1] = 5 usw. Dem ist also nicht so?
(Firma: guloshop.de) #2753080
Klaus Wachtler schrieb:
> oder noch einfacher: channels=atoi(&uart_string[1]);

Warum nicht so?
  chan1= uart_string[1]-'0';
  chan2= uart_string[2]-'0';

Wenn es immer genau zwei Stellen sind:
  channels= (uart_string[1]-'0')*10 + uart_string[2]-'0';

Läuft beides viiiel schneller.

Falls der Mikrocontroller nicht multiplizieren kann (z.B. ATtiny), gibts 
eine noch bessere Lösung.

Kann aber gut sein, dass ich die Aufgabenstellung nicht ganz verstanden 
habe...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.