Daten in Array speichern nach Überprüfung
-
Hallo
Ich habe folgende Frage.
Ich lese mit einem µC ein Gerät aus das mir folgeden Werte liefertINQUIRY 2
INQUIRY_PARTIAL 08:d4:2b:1e:40:22 1a010c "" -69
INQUIRY_PARTIAL 10:68:3f:24:6e:e2 5a020c "" -50
INQUIRY 2
INQUIRY 08:d4:2b:1e:40:22 1a010c
INQUIRY 10:68:3f:24:6e:e2 5a020ccheck=UB_Uart_ReceiveString(COM3,buf); if(check==RX_READY) { UB_Led_Toggle(LED_RED); if(strlen(buf)>40) { ptr=strtok(buf,delimiter); UB_UDP_Server_SendString(ptr); } }
in der Variable ptr kommt nun folgende Zeichenfolge an.
10:68:3f:24:6e:e5 5a020c "" -54
08:d4:2b:1e:40:22 1a010c "" -66diese Werte müsste ich nun in ein Array schreiben wenn die ersten 17 Zeichen noch nicht in dem Array sind.
Bei den ersten 17 Zeichen handelt es sich um eine MAC Adresse. Wenn die nicht im Array vorhanden ist sollte die ganze Zeichenfolge darin abgespeichert werde. Wenn sie vorhanden ist dann soll nichts gespeichert werden.
Leider kenn ich mich mit C nicht wirklich aus. Hatte in der Schule nur C#
Vieleicht kann mir dabei jemand helfen.
Gruß Christoph
-
Es gibt strncmp http://www.cplusplus.com/reference/cstring/strncmp/?kw=strncmp
Das n in der Mitte ist wichtig. Die vergleicht nur die ersten n Zeichen.
Allerdings ist das Case-sensitive.Evtl. gibt ea aber auf deinem System eine Abart, die Case-insensitive ist.
Oder du schreibst dir die Funktion selber. Ist auch nicht schwer.
-
Das ist sehr einfach zu erledigen.
Du schreibst dir, nachdem du dir über die wirklichen Zusammenhänge klar bist, eine (oder mehrere) Funktionen, die die Einzel- oder Gesamtaufgabe durchführen, und rufst sie dann an den entsprechenden Stellen auf.
Dabei sollten die Parameter möglichst flexibel sein und du solltest niemals globale Variablen stattdessen benutzen (sowas machen nur Deppen).
strtok ist auf jeden Fall der falsche Weg.Ein Beispiel:
char **strliste(const char *s) { int i; char b[100]; static int z; static char **a; if( !a ) a = calloc(1,sizeof*a); if( !s ) return a; if( 1!=sscanf(s,"%*s %99[^\n]",b) || strlen(b)<20 ) return 0; for(i=0;i<z;++i) if( !strncmp(a[i],b,17) ) return 0; a=realloc(a,(++z+1)*sizeof*a); a[z]=0; a[z-1]=malloc(strlen(b)+1);strcpy(a[z-1],b); return 0; }
Bei Übergabe von != NULL (also strliste(buf)) verarbeitet die Funktion den String entsprechend und merkt ihn sich in einer lokalstatischen Stringliste;
bei Übergabe von NULL wird diese Liste zurückgegeben, d.h. NACH der Verarbeitung rufst du einmal strliste(NULL) auf und durchläufst die rückgegebene Stringliste bis NULL, alsochar **s = strliste(0); while( *s ) puts(*s++);
Das Ende der Stringliste selbst ist durch NULL gekennzeichnet, deshalb kannst du wie gezeigt while benutzen. Zum Schluss die Liste+Strings wieder freigeben (free).