Zeichen aus Buffer löschen
-
Hi zusammen
Ich habe folgendes Problem:
Ich habe eine Funktion "ReadFile"
ReadFile(hComm,char* rxBuffer, bytesToReceive, bytesReceived, NULL);Die Funktion liest Daten über den Comport aus.
im rxBuffer werden die Daten gespeichert.
Nun zu meiner Frage:
Der rxBuffer Beinhaltet Daten nach folgendem Aufbau:VDC; FIXED; RANGE 4; RATE M;\x0d\x0a=>\x0d\x0a
Ich würde gerne die Steuerzeichen \x0d\x0a entfernen.
Wie bringe ich das fertig?
Danke für die Hilfe
-
http://en.wikipedia.org/wiki/Erase-remove_idiom
edit: Wobei du den Erase-Schritt bei char* als Container natürlich selbstständig implmenentieren musst.
-
Danke SeppJ..
Auch wenn es mich nicht weiter gebracht hat:D
Ich habe hier im Forum folgendes gesehen:
const char ch1 = '\x0a'; const char ch2 = '\x0d'; char *read = rxBuffer; char *write = rxBuffer; while (*read) { if (*read != ch1 || ch2) { *write++ = *read; } read++; } *write = '\0';Müsste doch funktionieren oder?
Jedoch gibt es mirn nichts aus, wenn ich am ende habe:
std::cout << *write
-
Ja, das macht genau das gleiche, aber manuell. Wenn du da dran mehr Spaß hast
. edit: Oh, und ich habe einen Fehler übersehen, siehe HighLigerBiMBam. Das kommt eben davon, wenn man alles selber macht anstatt die Standardbibliothek zu nutzen, dann macht man eben Fehler.Zur falschen Ausgabe: Was hat das * da zu suchen?
-
TTS schrieb:
Jedoch gibt es mirn nichts aus, wenn ich am ende habe:
verständlich... z.b. geht das "(*read != ch1 || ch2)" nicht.
-
Ja, sieht so aus als würde ich es nicht fertigbringen.
Kann mir vielleicht jemand die remove_erase Funktion erklären?
int elements[] = {0, 1, 2, 3, 4, 5,6 7, 8, 9, 10}; // create a vector vector<int> v(elements, elements + 10); // use the erase-remove idiom to remove all elements with the value 5 v.erase(remove(v.begin(), v.end(), 5), v.end());Jedoch muss es mir nicht alle Elemente mir dem wert 5 löschen sondern alle '\x0a' und '\x0d' (Ascii 10 und 13)
Danke
-
TTS schrieb:
Jedoch muss es mir nicht alle Elemente mir dem wert 5 löschen sondern alle '\x0a' und '\x0d' (Ascii 10 und 13)
Dann mach es entweder zweimal oder benutze remove_if mit einer entsprechenden Bedingung.
-
TTS schrieb:
Kann mir vielleicht jemand die remove_erase Funktion erklären?
Danke
-
Da remove den Container nicht kennt werden alle Elemente die gefunden wurden ans ende des Containers verschoben. Remove gibt daraufhin einen Zeiger auf diese Elemente zurück die dann von der Kontainerfunktion erase gelöscht werden.
Steht in SeppJ Link.