std::string Nullbyte ignorieren
-
Ich versuche gerade die Daten aus einem char-Buffer in einen string umzuwandeln.
Normal überhaupt kein Problem, nur diesmal ist irgendwo in dem char-Buffer ein Nullbyte hinter dem noch weitere Daten kommen.Wenn ich jetzt das hier mache
std::string newstr(buffer)... werden nur die Daten bis zum Nullbyte gelesen.
Gibt es da eine Möglichkeit das Nullbyte zu ignorieren und einfach den kompletten buffer in den string zu kriegen?
-
Mit dem Iteratorpaar-Konstrutktor:
std::string newstr(buffer, buffer+buflen);/edit: oder so:
std::string newstr(buffer, buflen);Gibt ja nicht nur den einen Konstruktor...
http://www.cplusplus.com/reference/string/string/string/
-
Hm stimmt, hätte ich auch selber draufkommen können

Aber was ist wenn ich den Konstruktor schon aufgerufen habe also:std::string newstr; char buffer[] = {'0', '1', '2', '\0', '3', '4'};Und dann den gesamten buffer in den string.
-
std::string hat eine Methode append. Hättest du auch selber drauf kommen können

btw: Du scheinst etwas in einen string (=Zeichenkette) stopfen zu wollen, was keine wirkliche Zeichenkette ist. Was willst du erreichen?
-
needhelp_1 schrieb:
Hm stimmt, hätte ich auch selber draufkommen können

Aber was ist wenn ich den Konstruktor schon aufgerufen habe also:std::string newstr; char buffer[] = {'0', '1', '2', '\0', '3', '4'};Und dann den gesamten buffer in den string.
Mit assign. Wieder gibt es viele Möglichkeiten, schau sie dir an:
http://www.cplusplus.com/reference/string/string/assign/
(Je nachdem, was du genau erreichen möchtest auch append, insert oder eine der vielen anderen Methoden. Schau dir die Referenz von String mal komplett an)Zwei kleine Anmerkungen:
Willst du nicht lieber einen Vector statt einem String? Das klingt mir nach binären Rohdaten, nicht direkt nach Zeichenketten.
Willst du diesen Vector (oder meinetwegen auch den String) nicht direkt als Buffer verwenden? Derzeit scheinst du sinnlos Daten hin und her zu schieben.edit: Zu langsam.
-
pumuckl schrieb:
std::string hat eine Methode append. Hättest du auch selber drauf kommen können

Tut mir Leid.
Ja ihr habt es geht viel einfacher, kommt davon wenn man zu wenig Schlaf hat.const_cast<char *>(data.c_str())
-
needhelp_1 schrieb:
const_cast<char *>(data.c_str())Was immer du damit sagen willst: Nein! Bloß nicht!
const_cast ist in erster Linie dazu da, Designfehler (fehlende const-correctness) in fremden Code zu beheben, den man nicht ändern kann. Die Standardbibliothek hat keine fehlende const-correctness! Es gibt Gründe, warum c_str() einen const char* zurück gibt!