Chris tian schrieb:
> char str[] = "oui $10 $1C 3<\n><\r>";
strtok könnte man nehmen, ich denke aber, dass es hier mit strchr 
einfacher ist, die gewünschte Information zu extrahieren.
mittels strchr nach dem '$' suchen lassen. Du kriegst einen Pointer 
zurück, wo das '$' das erste mal zu finden ist, die beiden Zeichen nach 
dem $ sind dann deine Hex-Ziffern, die nach bewährtem Muster zur 
eigentlichen Zahl zusammengesetzt werden.
Den Pointer, den du von strchr kriegst (wenn er nicht 0 ist), kannst du 
dann um 1 erhöht für einen weiteren strchr benutzen. Bzw. durch das 
Auslesen der Hex-Ziffern hast du dann sowieso schon automatisch einen 
Pointer, den du für den nächsten strchr benutzen kannst.
mal als Skizze:
1  | char str[] = "oui $10 $1C 3<\n><\r>"
  | 
2  | char* found;
  | 
3  | 
  | 
4  |    ...
  | 
5  | 
  | 
6  |   found = strchr( str, '$' );
  | 
7  |   if( found )
  | 
8  |   {
 | 
9  |     found++;
  | 
10  |     first = toHex( *found++ ) * 16;
  | 
11  |     first += toHex( *found++ );
  | 
12  | 
  | 
13  |     found = strchr( found, '$' );
  | 
14  |     if( found )
  | 
15  |     {
 | 
16  |       found++;
  | 
17  |       scnd = toHex( *found++ ) * 16;
  | 
18  |       scnd += toHex( *found++ );
  | 
19  |     }
  | 
20  |   }
  | 
21  | 
  | 
22  | ...
  | 
23  | uint8_t toHex( char c )
  | 
24  | {
 | 
25  |   if( c >= 'A' && c <= 'F' )
  | 
26  |     return c - 'A' + 10;
  | 
27  | 
  | 
28  |   return c - '0';
  | 
29  | }
  | 
du kannst das auch in Schleifen packen, wie es dir beliebt. Aufpassen 
musst du nur, dass du die beiden 'Hex-Zusammensetzteile' nicht in eine 
Anweisung packen kannst
1  |      first = toHex( *found++ ) * 16 + toHex( *found++ );
  | 
weil hier ein paar Dinge nicht sauber wären. Kurz gesagt ist die 
Reihenfolge einiger Operationen so nicht definiert, wohingegen bei 2 
Anweisungen
1  |       first = toHex( *found++ ) * 16;
  | 
2  |       first += toHex( *found++ );
  | 
alles sauber und nach den Regeln der Kunst abläuft.
Allenfalls hätte man es noch so schreiben können
1  |      ...
  | 
2  | 
  | 
3  |      first = toHex( found[1] ) * 16 + toHex( found[2] );
  | 
4  |      found++
  | 
5  | 
  | 
6  |      ....
  | 
aber das schenkt sich nicht viel.