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); ?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.