<?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[istream &amp;gt;&amp;gt; string : bestimmte laenge n in string schreiben]]></title><description><![CDATA[<p>hola leute</p>
<p>hab in einer datei 'binaere' strings gespeichert</p>
<p>aufbau:</p>
<pre><code>[laenge n: 4 byte binaer][string mit der laenge n]
</code></pre>
<p>nun will ich den binaeren string in einen std::string reinschreiben. wie mach ich das am besten ?<br />
bis jetzt hab ich einen buffer dynamisch allokiert, da den string reingeschrieben und mittels assign dem std::string zugewiesen. geht das nicht auch anders ? so muss fuer den string ja 2 mal speicher angefordert werden.<br />
dachte das es vielleicht mit istream_iteratoren funktionieren koennte, scheint aber nicht so zu sein.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184475/istream-gt-gt-string-bestimmte-laenge-n-in-string-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 20:19:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184475.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Jun 2007 15:06:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to istream &amp;gt;&amp;gt; string : bestimmte laenge n in string schreiben on Fri, 15 Jun 2007 15:06:55 GMT]]></title><description><![CDATA[<p>hola leute</p>
<p>hab in einer datei 'binaere' strings gespeichert</p>
<p>aufbau:</p>
<pre><code>[laenge n: 4 byte binaer][string mit der laenge n]
</code></pre>
<p>nun will ich den binaeren string in einen std::string reinschreiben. wie mach ich das am besten ?<br />
bis jetzt hab ich einen buffer dynamisch allokiert, da den string reingeschrieben und mittels assign dem std::string zugewiesen. geht das nicht auch anders ? so muss fuer den string ja 2 mal speicher angefordert werden.<br />
dachte das es vielleicht mit istream_iteratoren funktionieren koennte, scheint aber nicht so zu sein.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306656</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Fri, 15 Jun 2007 15:06:55 GMT</pubDate></item><item><title><![CDATA[Reply to istream &amp;gt;&amp;gt; string : bestimmte laenge n in string schreiben on Fri, 15 Jun 2007 18:38:28 GMT]]></title><description><![CDATA[<p>hmm? file_stream.read(static_cast&lt;const char*&gt;(len_data), sizeof(len_data) /* = 4 */) ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306798</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 15 Jun 2007 18:38:28 GMT</pubDate></item><item><title><![CDATA[Reply to istream &amp;gt;&amp;gt; string : bestimmte laenge n in string schreiben on Fri, 15 Jun 2007 18:53:21 GMT]]></title><description><![CDATA[<p>getline hat doch auch ein Argument in dem die maximale länge festgelegt wird ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306815</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Fri, 15 Jun 2007 18:53:21 GMT</pubDate></item><item><title><![CDATA[Reply to istream &amp;gt;&amp;gt; string : bestimmte laenge n in string schreiben on Sun, 17 Jun 2007 16:04:20 GMT]]></title><description><![CDATA[<p>darthdespotism schrieb:</p>
<blockquote>
<p>getline hat doch auch ein Argument in dem die maximale länge festgelegt wird ...</p>
</blockquote>
<p>Aber nicht die Variante, die einen std::string verarbeitet.</p>
<p>(D)Evil schrieb:</p>
<blockquote>
<p>hmm? file_stream.read(static_cast&lt;const char*&gt;(len_data), sizeof(len_data) /* = 4 */) ...</p>
</blockquote>
<p>In wie weit hat das mit der Frage zu tun? Die war doch, wie man sich die (zweite) Allokation spart. Oder irre ich mich da?</p>
<p>@Meep Meep<br />
Da std::string das Memory-Management komplett übernimmt (und kapselt), gibt es da leider keine Möglichkeit. Die Alternative wäre die Verwendung eines std::vector&lt;char&gt;. Den könntest du erst passend resizen und dessen Speicher dann direkt als Ziel der Einlesefunktion verwenden. Selbiges geht für einen std::string nicht, da hier nicht garantiert ist, dass der Speicher &quot;am Stück&quot; verwaltet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307812</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 17 Jun 2007 16:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to istream &amp;gt;&amp;gt; string : bestimmte laenge n in string schreiben on Mon, 18 Jun 2007 07:47:34 GMT]]></title><description><![CDATA[<p>hola</p>
<p>hab jetzt grad keinen compiler zum tsten zur hand, aber ich glaub ich werde das foglend loesen:</p>
<pre><code class="language-cpp">void ReadBinaryFromStream(std::istream &amp;in, std::string &amp;str)
{
   std::size_t len;
   ReadBinaryFromStream(in, len); /* hier hole ich mir die string-laenge */
   if(len == 0)
      return;

   str.reserve(len + 1); /* speicher reservieren */ 
   std::streambuf *buf = in.rdbuf();
   while(len--)
      str += static_cast&lt;char&gt;(buf-&gt;sbumpc());
}
</code></pre>
<p>zwar nicht hochperformant, aber nach dem die strings meistens nicht laenger als 32 zeichen sind, sollte das schon passen.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308174</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Mon, 18 Jun 2007 07:47:34 GMT</pubDate></item></channel></rss>