<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[std::string Speicherdarstellung - mit char* überschreiben?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich würde gerne einen std::string serialisieren und frage mich, ob mit data() ein Pointer zu einem konsistenten char* Speicherbereich zurückgegeben wird, denn ich überschreiben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/300026/std-string-speicherdarstellung-mit-char-überschreiben</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 23:57:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300026.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Feb 2012 16:52:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 16:52:04 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich würde gerne einen std::string serialisieren und frage mich, ob mit data() ein Pointer zu einem konsistenten char* Speicherbereich zurückgegeben wird, denn ich überschreiben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184814</guid><dc:creator><![CDATA[Stevo2534]]></dc:creator><pubDate>Thu, 23 Feb 2012 16:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 16:55:28 GMT]]></title><description><![CDATA[<p>data() liefert einen const char* zurück. Der Speicher muss nicht nullterminiert, aber zusammenhängend sein.</p>
<p>In C++11 muss der Speicher zusammenhängend sein, das heißt bei entsprechender Größe darfst du auch rein schreiben. Zeiger würde ich mir über &amp;*begin() holen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184819</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 23 Feb 2012 16:55:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 16:57:38 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>In C++11 muss der Speicher zusammenhängend sein, das heißt bei entsprechender Größe darfst du auch rein schreiben. Zeiger würde ich mir über &amp;*begin() holen.</p>
</blockquote>
<p>Würde ich aber davon abraten. Weil du mit resize vorher die größe festlegen musst und dann ist die Frage, warum nicht gleich mit assign() arbeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184820</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 23 Feb 2012 16:57:38 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 17:00:06 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>cooky451 schrieb:</p>
<blockquote>
<p>In C++11 muss der Speicher zusammenhängend sein, das heißt bei entsprechender Größe darfst du auch rein schreiben. Zeiger würde ich mir über &amp;*begin() holen.</p>
</blockquote>
<p>Würde ich aber davon abraten. Weil du mit resize vorher die größe festlegen musst und dann ist die Frage, warum nicht gleich mit assign() arbeiten?</p>
</blockquote>
<p>Also lieber in char* und dann mit assign() ?</p>
<p>Hatte vorher resize() aufgerufen und dann direkt nach str.data() reinkopiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184823</guid><dc:creator><![CDATA[Stevo2534]]></dc:creator><pubDate>Thu, 23 Feb 2012 17:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 17:01:45 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Würde ich aber davon abraten. Weil du mit resize vorher die größe festlegen musst und dann ist die Frage, warum nicht gleich mit assign() arbeiten?</p>
</blockquote>
<p>Weil er dann eine unnötige Kopie machen muss? Und warum assign, dann kann er auch gleich operator = nehmen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184825</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 23 Feb 2012 17:01:45 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 17:04:20 GMT]]></title><description><![CDATA[<p>[quote=&quot;cooky451&quot;]</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Weil er dann eine unnötige Kopie machen muss?</p>
</blockquote>
<p>Genau deshalb habe ich gleich in den std::string reinkopiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184827</guid><dc:creator><![CDATA[Stevo2534]]></dc:creator><pubDate>Thu, 23 Feb 2012 17:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 17:23:45 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Weil er dann eine unnötige Kopie machen muss?</p>
</blockquote>
<p>Wo muss er das? Seh ich nicht ganz ein.</p>
<p>Nehmen wir mal an er will irgendeine Sequenz von chars von irgendwo in den string kopieren, dabei vielleicht nur einen Teil des strings überschreiben.</p>
<p>Dann macht string::replace das was er möchte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184829</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 23 Feb 2012 17:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 17:23:18 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>cooky451 schrieb:</p>
<blockquote>
<p>Weil er dann eine unnötige Kopie machen muss?</p>
</blockquote>
<p>Wo muss er das? Seh ich nicht ganz ein.</p>
</blockquote>
<p>Tut mir Leid, ich kenne keine Möglichkeit, außer direkt in den std::string zu schreiben - und ich denke auch nicht, dass es eine gibt. Wenn du eine kennst, bitte ich dich darum sie zu präsentieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184830</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 23 Feb 2012 17:23:18 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 17:28:36 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Tut mir Leid, ich kenne keine Möglichkeit, außer direkt in den std::string zu schreiben - und ich denke auch nicht, dass es eine gibt. Wenn du eine kennst, bitte ich dich darum sie zu präsentieren.</p>
</blockquote>
<p>Siehe mein edit oben - replace deckt alles ab was ich mir in der Richtung vorstellen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184834</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 23 Feb 2012 17:28:36 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 17:31:26 GMT]]></title><description><![CDATA[<p>Das Ganze wird direkt an einen Stream übergeben. Das kann alles mögliche sein, in der Regel aber ein Socket.</p>
<p>Der schreibt dann unmittelbar in einen Speicherbereich rein.</p>
<p>Deshalb habe ich auch mit <strong>&amp;(string[0])</strong> direkt einen Zeige darauf übergeben und reinschreiben lassen.</p>
<p>Sonst müsste ich zunächst mit new char[] mit Speicher holen, dann dort reinschreiben lassen und am Ende mit assign(), replace() oder sonstwas kopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184839</guid><dc:creator><![CDATA[Stevo2534]]></dc:creator><pubDate>Thu, 23 Feb 2012 17:31:26 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 17:32:04 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Siehe mein edit oben - replace deckt alles ab was ich mir in der Richtung vorstellen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Dann wolltest du wohl noch nie von einer C-API aus etwas in einen String schreiben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184840</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 23 Feb 2012 17:32:04 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Thu, 23 Feb 2012 18:15:57 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Siehe mein edit oben - replace deckt alles ab was ich mir in der Richtung vorstellen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Dann wolltest du wohl noch nie von einer C-API aus etwas in einen String schreiben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Weil man dafuer auch nicht std::string verwendet.</p>
<p>Wenn es eine C API ist, dann ist std::vector besser als std::string, bzw. hat man fuer sowas eine eigene string Klasse.</p>
<p>Direkt in den String schreiben ist unschoen und wird von reiner C API ja auch nicht direkt unterstuetzt - da man vorher die exakte groesse wissen muss. Oder natuerlich man macht 2 mal resize.</p>
<p>Ne ne, std::string und C APIs mixen ist ungut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2184857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2184857</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 23 Feb 2012 18:15:57 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Fri, 24 Feb 2012 13:35:54 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Dann wolltest du wohl noch nie von einer C-API aus etwas in einen String schreiben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Stimmt, auf so einen unsinnigen Gedanken bin ich nie gekommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Einer C-API gebe ich nur Dinge, mit der eine C-API auch zurechtkommt - strings gehören nicht dazu <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185185</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 24 Feb 2012 13:35:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Fri, 24 Feb 2012 13:57:32 GMT]]></title><description><![CDATA[<p>Er serialisiert, dh. die Daten kommen aus einem Stream.<br />
std::istream::read nimmt ein char* als Destination.<br />
Ohne direkt reinschreiben muss er Kopien erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185195</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 24 Feb 2012 13:57:32 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Fri, 24 Feb 2012 16:02:31 GMT]]></title><description><![CDATA[<p>Dann aber bitte in ein std::vector&lt;char&gt; und nicht in ein std::string.<br />
Zumal (entegegen Behauptungen in diesem Thread) das interne Memory von std::string in C++03 nicht zusammenhängend sein muss. Ab C++11 ist das so - vorher muss es nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185280</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 24 Feb 2012 16:02:31 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Fri, 24 Feb 2012 16:12:12 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>Dann aber bitte in ein std::vector&lt;char&gt; und nicht in ein std::string.<br />
Zumal (entegegen Behauptungen in diesem Thread) das interne Memory von std::string in C++03 nicht zusammenhängend sein muss. Ab C++11 ist das so - vorher muss es nicht.</p>
</blockquote>
<p>Dann hat man aber ein Kopie. Und wieso sollte man mit C++11 nicht direkt in den String schreiben? Spricht ja nichts dagegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185290</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 24 Feb 2012 16:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Fri, 24 Feb 2012 16:30:17 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>theta schrieb:</p>
<blockquote>
<p>Dann aber bitte in ein std::vector&lt;char&gt; und nicht in ein std::string.<br />
Zumal (entegegen Behauptungen in diesem Thread) das interne Memory von std::string in C++03 nicht zusammenhängend sein muss. Ab C++11 ist das so - vorher muss es nicht.</p>
</blockquote>
<p>Dann hat man aber ein Kopie. Und wieso sollte man mit C++11 nicht direkt in den String schreiben? Spricht ja nichts dagegen.</p>
</blockquote>
<p>Doch, natürlich mit C++11 schon, nur nicht mit C++03.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185307</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 24 Feb 2012 16:30:17 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Fri, 24 Feb 2012 17:00:21 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Er serialisiert, dh. die Daten kommen aus einem Stream.<br />
std::istream::read nimmt ein char* als Destination.<br />
Ohne direkt reinschreiben muss er Kopien erzeugen.</p>
</blockquote>
<p>Das ist falsch. Ich kann hier sehr wohl ohne Kopie std::string verwenden. Je nachdem wie ich serialisiere rufe ich vorher ein reserve auf und dann push_back. Wenn es eine C++ API geht das auch super mit einem insert iterator.</p>
<p>Sprich: wenn die SerialisierungsAPI eine C++ API ist, ists easy.</p>
<p>Wenn die SerialisierungsAPI eine C API ist, ist std::string eine schlechte Idee. Dann macht man 1 resize, kopiert in den std::string und macht nachher noch ein resize. Aber das ist böse und sollte nur als unbedingter Notfall gemacht werden.</p>
<p>Besser ist natürlich wenn ich statt einem char* zu übergeben nur einen char bekommen kann, dann kann ich das auch mit std::string und push_back easy machen. Jede File API bietet ein get() an dass nur 1 Byte liefert. Die File API selber puffert ja sowieso, ich muss also nicht unbedingt große Chunks lesen.</p>
<p>Wenn möglich natürlich eine C++ API verwenden oder eine C API Kompatible String Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185318</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 24 Feb 2012 17:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Fri, 24 Feb 2012 18:21:54 GMT]]></title><description><![CDATA[<p>Ich denke, ihr redet aneinander vorbei. Was Ethon wahrscheinlich meint ist Folgendes (bei mir ist dies eine Klasse zum Lesen von einfachen Binärdateien, bei denen die Reihenfolge bekannt ist):</p>
<pre><code class="language-cpp">BinaryIStream &amp;operator&gt;&gt;(std::string &amp;s) // operator für alles überladen, hier string
{
	unsigned len;
	*this&gt;&gt;len;  // Länge (32 Bit) wird immer vor den String geschrieben (ohne Nullterminierung)
	std::vector&lt;char&gt; buff(len+1);  // Umweg über vector in C++ 03 nötig
	read(&amp;buff[0], static_cast&lt;std::streamsize&gt;(len));

	s=&amp;buff[0];  // Zuweisung (die besschriebene Kopie)

	return *this;
}
</code></pre>
<p>Mit den Garantien des neuen Standards bezüglich strings ließe sich das Ganze eben noch verbessern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185336</guid><dc:creator><![CDATA[Thorgrim]]></dc:creator><pubDate>Fri, 24 Feb 2012 18:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Fri, 24 Feb 2012 22:30:34 GMT]]></title><description><![CDATA[<p>Der Code ist nicht gut, weil unnoetige Kopien.</p>
<pre><code class="language-cpp">BinaryIStream &amp;operator&gt;&gt;(std::string &amp;s) // operator für alles überladen, hier string
{
	unsigned len;
	*this&gt;&gt;len;  // Länge (32 Bit) wird immer vor den String geschrieben (ohne Nullterminierung)
        s.reserve(len);
        while(len--)
           char c;
           read(&amp;c, 1);
           s.push_back(c);
        }
	return *this;
}
</code></pre>
<p>In C++11 kann man durch das move natuerlich eine Kopie sparen, aber wozu das ganze so umstaendlich machen?</p>
<p>btw wurde in deinem Code zB die nullterminierung des strings vergessen. Oder nullt der vector alle Elemente? Das waere ja noch lahmer...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185433</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 24 Feb 2012 22:30:34 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Fri, 24 Feb 2012 23:08:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">BinaryIStream &amp;operator&gt;&gt;(std::string &amp;s) // operator für alles überladen, hier string
{
    unsigned len;
    *this&gt;&gt;len;  // Länge (32 Bit) wird immer vor den String geschrieben (ohne Nullterminierung)
    s.resize(len);
    read(&amp;s[0], len);

    return *this;
}
</code></pre>
<p>So wärs deutlich schneller.</p>
<blockquote>
<p>Oder nullt der vector alle Elemente? Das waere ja noch lahmer...</p>
</blockquote>
<p>Ja, sie werden default konstruiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185443</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 24 Feb 2012 23:08:40 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Sat, 25 Feb 2012 11:08:49 GMT]]></title><description><![CDATA[<p>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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185537</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 25 Feb 2012 11:08:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Sat, 25 Feb 2012 13:43:26 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">BinaryIStream &amp;operator&gt;&gt;(std::string &amp;s) // operator für alles überladen, hier string
{
    unsigned len;
    *this&gt;&gt;len;  // Länge (32 Bit) wird immer vor den String geschrieben (ohne Nullterminierung)
    s.resize(len);
    read(&amp;s[0], len);

    return *this;
}
</code></pre>
<p>So wärs deutlich schneller.</p>
</blockquote>
<p>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.</p>
<p>std::wstring behandle ich anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185595</guid><dc:creator><![CDATA[Stevo2534]]></dc:creator><pubDate>Sat, 25 Feb 2012 13:43:26 GMT</pubDate></item><item><title><![CDATA[Reply to std::string Speicherdarstellung - mit char* überschreiben? on Sat, 25 Feb 2012 13:45:27 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>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.</p>
</blockquote>
<p>Ich nutze nur die Datentypen aus cstdint (uint8_t, uint32_t, etc.) in meiner Serialisierung-Lib.</p>
<p>Ich finde, das sorgt für mehr Klarheit. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185596</guid><dc:creator><![CDATA[Stevo2534]]></dc:creator><pubDate>Sat, 25 Feb 2012 13:45:27 GMT</pubDate></item></channel></rss>