Hallo Leute,
ich möchte einen String parsen, der z.B. in der Form "$first=88\r99"
vorliegen kann. Merkwürdiger Weise kann die nachfolgende Funktion den
teil zwischen $ und = (hier: "first") sehr gut herausfinden und auch der
Wert (hier: 88) wird korrekt herausgeparst. Wenn ich tmpstr1 oder
tmpstr2 in timerbuffer schreibe, erhalte ich den gewünschten Teilstring.
Es gibt nur ein Problem mit strcmp --> Dort geht er nämlich nicht rein!
Hat jemand eine Idee, woran das liegen könnte?
1 | void extract_data(char *str)
|
2 | {
|
3 | uint8_t cnt = 0;
|
4 | int8_t equalspos = -1;
|
5 | char tmpstr1[20];
|
6 | char tmpstr2[20];
|
7 |
|
8 | if (str[0] == '$') { // command
|
9 | while(str[cnt] != '=' && cnt < strlen(str))
|
10 | {
|
11 | cnt++;
|
12 | }
|
13 | if (str[cnt] == '=') {
|
14 | equalspos = cnt;
|
15 |
|
16 | // command
|
17 | for (cnt=1; cnt<equalspos; cnt++)
|
18 | {
|
19 | tmpstr1[cnt-1] = str[cnt];
|
20 | }
|
21 | tmpstr1[equalspos-1] = '\0';
|
22 |
|
23 | // value
|
24 | cnt=equalspos+1;
|
25 | while(str[cnt] != '\r' && cnt < strlen(str))
|
26 | {
|
27 | tmpstr2[cnt-equalspos-1] = str[cnt];
|
28 | cnt++;
|
29 | }
|
30 | tmpstr2[cnt-equalspos-1] = '\0';
|
31 |
|
32 | if (newdata == 0) {
|
33 | newdata = 1;
|
34 | strcpy(timerbuffer, tmpstr1);
|
35 | }
|
36 |
|
37 |
|
38 | if(strcmp(tmpstr1, "first") == 0) {
|
39 | uart_putc('1');
|
40 | }
|
41 | if(strcmp(tmpstr1, "second") == 0) {
|
42 | uart_putc('2');
|
43 | }
|
44 | }
|
45 | else {
|
46 |
|
47 | }
|
48 |
|
49 | }
|
50 | else { // data
|
51 | uart_puts("No Order\r");
|
52 | }
|
53 | }
|
(Edit: Sorry, dass es in "Mikrocontroller und Elektronik" gelandet ist -
habe nach der Forensuche nicht mehr darauf geachtet, in welchem Bereich
ich gerade bin --> würde eher in GCC passen)