Arduino / C: Umwandeln byte-array in string oder andere vergleichbare text-format
Bin ich über einige Bibliotheken von Drittanbietern für einige Drittanbieter-hardware. Die Bibliotheken, die Kommunikation mit der hardware über eine serielle Verbindung. Mit den Bibliotheken, die ich senden von Daten über die serielle Schnittstelle auf die hardware und bekommen eine Antwort, die ist gespeichert in einem array:
//This is the byte array declared in the third party libraries
//that stores data sent back from the external hardware
byte comm_buf[201];
/* I send data to hardware, comm_buf gets filled */
//Printing out the received data via a second serial line to which
//I have a serial monitor to see the data
for (int i = 0; i <= 50; i++) {
Serial.print(gsm.comm_buf[i]);
}
//This is printed via the second monitoring serial connection (without spaces)
13 10 43 67 82 69 71 58 32 48 44 51 13 10 13 10 79 75 13 10 00
//It is the decimal ascii codes for the following text
+CREG: 0,3
Wie kann ich umwandeln byte-array in ein format, dass ich evalute im code, so kann ich einen Vorgang ausführen, wie der folgende pseudo-code;
byte comm_buf[201];
/* I send data to hardware, comm_buf gets filled */
if (comm_buf[] == "CREG: 0,3" ) {
//do stuff here
}
Muss ich es in einen string konvertieren, wie einige, oder vergleichen zu anderen char-array vielleicht?
Sind Sie auf der Suche nach
Ja, und können Sie beheben den Fehler durch googeln der Fehlermeldung 😉
Es hat etwas mit Effizienz zu tun. Die Typisierung der Betrieb ist, in diesem (einfachsten) Fall, tut nichts in den code - es ist nur Narren der compiler. Der Grund:
strcmp(com_buffer, "CREG: 0,3")
?if (strcmp(gsm.comm_buf,"\r\n+CREG: 0,3\r\n\r\nOK\n")) {
gibt den Fehler invalid conversion from 'byte*' to 'const char*'
Ja, und können Sie beheben den Fehler durch googeln der Fehlermeldung 😉
strcmp((const char *)comm_buf, "foobar")
Es hat etwas mit Effizienz zu tun. Die Typisierung der Betrieb ist, in diesem (einfachsten) Fall, tut nichts in den code - es ist nur Narren der compiler. Der Grund:
strcmp()
erwartet zwei Argumente vom Typ const char *
, aber das array ist vom Typ byte[]
die Zerfälle in byte *
wenn die an die Funktion übergeben - und zwei Zeiger, von denen der Basis-Typ ist anders (const char *
und byte *
in deinem Fall) sind inkompatible Typen.InformationsquelleAutor jwbensley | 2013-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind alle Funktionen in
string.h
für string/memory-Vergleich, den Sie verwenden könnten mit arduino. Könnten Siestrcmp
odermemcmp
.Vorsicht, das kann man nicht vergleichen in C zwei strings einfach mit
==
Betreiber. Sie würde nur vergleichen die Werte von zwei memory-Zeiger.Hier ist ein Beispiel der Vergleich innerhalb Ihrer Puffer:
Können Sie strcmp wenn Ihre empfangene-Nachricht null-byte beendet, wenn nicht, müssen Sie verwenden memcmp für den job.
Für beide Funktionen, die Sie haben zu prüfen, ob Rückgabewert ist null, dann werden diese Zeichenfolgen gleich sind.
Wenn Sie vergleichen möchten, nicht vom ersten byte-Puffer (mit index null), aber beispielsweise die fünfte (index 4) können Sie einfach fügen Sie 4, um den Zeiger:
memcmp
erwartet eine Letzte parameter (.., ..,size_t num
)Ich habe korrigiert.
InformationsquelleAutor nio