Hallo liebe Forenbesucher,
wie schon im Betreff angegeben, habe ich immense Schwierigkeiten mit der
strtoke Funktion und inzwischen so verzweifelt, dass ich ich euch um Rat
bitten muss.
Also meine Idee ist es, ein empfangenes Frame (z.B: 1,50000) auf seinen
Inhalt zu prüfen und aus dem Grund verwende ich strtok, um das Frame zu
zertrennen. Nur habe ich das Problem, dass ich beim zweiten Charakter
(in dem Fall "50000") irgendwas anderes erhalte. Beim ersten Charakter
läuft es solange gut, solange es nur ein Zeichen ist aber sobald ich
z.B: '10' empfange, kontrolliert er mir nur die '1' und nicht '10' als
ganzes.
Der Quellcode diesbezüglich ist unten angegeben:
1 | int msg_receive;
|
2 | int i = 0;
|
3 | int var = 0;
|
4 | int delimiter[] = ",";
|
5 | char *ptr = NULL;
|
6 | char msg[] = "1,10000";
|
7 |
|
8 | ptr = strtok(msg, delimiter);
|
9 | while(ptr != NULL){
|
10 | switch (i){
|
11 | case 0: if (((*ptr >= '1') && (*ptr <= '3')) || ((*ptr >= 'S') && (*ptr <= 'R'))){
|
12 | msg_receive = 1; break;
|
13 | }
|
14 | else{
|
15 | msg_receive = 0; break;
|
16 | }
|
17 | case 1: var = atoi(ptr);
|
18 | if (var > 0 && var <= 999){
|
19 | msg_receive = 1; break;
|
20 | }
|
21 | else{
|
22 | msg_receive = 0; break;
|
23 | }
|
24 | default: msg_receive = 0; break;
|
25 | }
|
26 | ptr = strtok(NULL, delimiter);
|
27 | i++;
|
28 | if (msg_receive != 1)
|
29 | break;
|
30 | }
|
Ich hoffe, der angeführte Quellcode ist verständlich. Also parallel zu
Framezerlegung, lasse ich innerhalb einer Switch case Anweisung die
Richtigkeit des Frames überprüfen. Im ersten Durchgang wird der erste
Charakter überprüft und im zweiten wird geschaut, ob das enthaltene
Charakter innerhalb des festgelegten Rahmens ist (hier zwischen 0-999).
Dazu verwende ich die Funktion atoi, um daraus eben einen Integer zu
machen.
Ich hoffe Ihr könnt mir hier weiterhelfen.
Lg