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


von Marc M. (macmek)


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

von Karl heinz B. (kbucheg)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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:
1
#include <stdio.h>
2
3
...
4
   int a, b;
5
...
6
   if (sscanf(str, "S%d=%d", &a, &b) == 2) {
7
     /* alles gefunden */
8
   }
p.s.: alles in Großbuchstaben (STR) benutzt man per Konvention für
Makros.  Variablen sollten Kleinbuchstaben oder einen Mix benutzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.