std::string Speicherdarstellung - mit char* überschreiben?
-
BinaryIStream &operator>>(std::string &s) // operator für alles überladen, hier string { unsigned len; *this>>len; // Länge (32 Bit) wird immer vor den String geschrieben (ohne Nullterminierung) s.resize(len); read(&s[0], len); return *this; }So wärs deutlich schneller.
Oder nullt der vector alle Elemente? Das waere ja noch lahmer...
Ja, sie werden default konstruiert.
-
unsigned ist schonmal, was binäres lesen angeht, Gift für Plattformunabhängigkeit. Entweder uint16_t oder uint32_t, wobei ich nicht glaube das jemand mehr als 65535 Zeichen in einen String stecken möchte.
-
Ethon schrieb:
BinaryIStream &operator>>(std::string &s) // operator für alles überladen, hier string { unsigned len; *this>>len; // Länge (32 Bit) wird immer vor den String geschrieben (ohne Nullterminierung) s.resize(len); read(&s[0], len); return *this; }So wärs deutlich schneller.
Exakt so mache ich es auch beim std::string derzeit! Zuerst ein full-resize und dann direkt reinkopieren lassen. Die festen 32-Bit geben die Länge zu Beginn an und werden jeweils in little-endian oder big-endian übertragen.
std::wstring behandle ich anders.
-
314159265358979 schrieb:
unsigned ist schonmal, was binäres lesen angeht, Gift für Plattformunabhängigkeit. Entweder uint16_t oder uint32_t, wobei ich nicht glaube das jemand mehr als 65535 Zeichen in einen String stecken möchte.
Ich nutze nur die Datentypen aus cstdint (uint8_t, uint32_t, etc.) in meiner Serialisierung-Lib.
Ich finde, das sorgt für mehr Klarheit.
