www.mikrocontroller.net

Forum: Compiler & IDEs Wie aus String 2 Interger heraustrennen ?


Autor: Marc Mk (macmek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte einen getippten Befehl via Terminal an den AVR senden um dort
Servos zu positionieren.
Z.B.: "S3=400" + "S12=1020" (Servo 3 auf Pos 400, Servo 12 auf Pos
1020)

Ich kann die Buchstaben 'S' und '=' lokalisieren:

if ( memchr(STR,'S',2) > 0)  //S vorhanden
  if ( memchr(STR,'=',5) > 0)  //= vorhanden

Aber im avr-libc/user-manual oder hier im Forum finde ich keinen
passenden Befehl, nur "Von Anfang bis x", aber keinen mit dem ich die
Zahlen gezielt heraustrennen kann ?


Und dann schliesslich
S3 = strtol(teilstring, 0, 10);
oder besser
S3 = atoi (teilstring);
?

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast 2 Möglichkeiten:
* Tatsächlich einen Substring erstellen, der die
  Teile enthält die du brauchst
* du teilst strtol bzw. atoi mit, dass sie gefälligst
  nicht am Anfang des kompletten Strings mit der
  Arbeit anfangen sollen, sondern wo anders

ad 2)
  wenn du weisst, dass die Zahl immer im String
  an Position 5 steht:

  atoi( String + 5 );
  strtol( String + 5, 0, 10 );

ad 1)
  Ist eigentlich dieselbe Idee wie bei ad 2), nur halt
  mit strncpy benutzt

  char SubString[10];

  strncpy( SubString, String + 5, 2 );
  SubString[2] = '\0';

  // kopiert 2 Zeichen, beginnend an der 5. Position von
  // String nach Substring.


> memchr
Benutz bitte die richtigen Funktionen um mit Strings zu
arbeiten. Die mem...() Funktionen arbeiten auf Speicher-
Felder. Die str...() Funktionen arbeiten mit C-Strings.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er hat noch eine dritte Möglichkeit: sscanf().  Falls es die
verfügbaren Resourcen des verwendeten Prozessors (also insbesondere
der freie flash-ROM) hergeben, ist das eigentlich die eleganteste:
#include <stdio.h>

...
   int a, b;
...
   if (sscanf(str, "S%d=%d", &a, &b) == 2) {
     /* alles gefunden */
   }
p.s.: alles in Großbuchstaben (STR) benutzt man per Konvention für
Makros.  Variablen sollten Kleinbuchstaben oder einen Mix benutzen.

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.