<?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[Stream in char* kopieren]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>für ein binäres Dateiformat habe ich eine Klasse, die Daten zwecks Speicherung in einen Stream schreibt.</p>
<p>Diese Klasse soll jetzt in einem anderen Programm verwendet werden. Dieses andere Programm arbeitet intern allerdings mit char*-Buffern.</p>
<p>Meine Frage: Ist es möglich, den Inhalt eines Streams (ofstream) in einen char* zu kopieren? Dies wäre der Speichervorgang. Beim Laden würde der umgekerhte Weg gebraucht werden, also Inhalt eines char*-Buffers in einen ifstream.</p>
<p>Hat jemand eine Idee?</p>
<p>Vielen Dank!</p>
<p>Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/215871/stream-in-char-kopieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 02:05:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215871.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Jun 2008 14:30:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stream in char* kopieren on Mon, 16 Jun 2008 14:30:05 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>für ein binäres Dateiformat habe ich eine Klasse, die Daten zwecks Speicherung in einen Stream schreibt.</p>
<p>Diese Klasse soll jetzt in einem anderen Programm verwendet werden. Dieses andere Programm arbeitet intern allerdings mit char*-Buffern.</p>
<p>Meine Frage: Ist es möglich, den Inhalt eines Streams (ofstream) in einen char* zu kopieren? Dies wäre der Speichervorgang. Beim Laden würde der umgekerhte Weg gebraucht werden, also Inhalt eines char*-Buffers in einen ifstream.</p>
<p>Hat jemand eine Idee?</p>
<p>Vielen Dank!</p>
<p>Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530183</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 16 Jun 2008 14:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Mon, 16 Jun 2008 14:40:26 GMT]]></title><description><![CDATA[<p>Simples Beispiel:</p>
<pre><code class="language-cpp">std::ifstream of;
  of.open(&quot;C:\\aoi_outp.txt&quot;);
  char s[32768];
  of.get(s,32768);
</code></pre>
<p>Du brauchst natürlich einen ifstream, ofstream ist zum Schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530193</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Mon, 16 Jun 2008 14:40:26 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 19 Jun 2008 09:24:25 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>Du brauchst natürlich einen ifstream, ofstream ist zum Schreiben.</p>
</blockquote>
<p>Vielen Dank! Das war's.</p>
<p>Grüße<br />
Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1532077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532077</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 19 Jun 2008 09:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Mon, 23 Jun 2008 12:30:40 GMT]]></title><description><![CDATA[<p>Leider hat sich jetzt ein neues Problemchen ergeben. Dazu muss ich, so glaub ich, ein wenig weiter ausholen. Intern bin ich jetzt auf einen stringstream umgestiegen, um zeitgleich lesen und schreiben zu können. Die Daten, die ich speichern möchte, sind größtenteils Doubles:</p>
<pre><code class="language-cpp">sstream.write(reinterpret_cast&lt;char *&gt;(&amp;y), sizeof(y));
</code></pre>
<p>Die Konvertierung zwischen stream und char* schaut wie folgt aus:</p>
<pre><code class="language-cpp">//stream in char*
  int size = sstream.tellp();
  char* s = new char[size];
  sstream.seekg(0);
  sstream.get(&amp;s[0],size);
</code></pre>
<p>Je nach Daten kommt es manchmal vor, dass der Buffer s nicht ganz gefüllt wird, also irgendwann der Inhalt des Streams einfach abgeschnitten wird.</p>
<p>Woran könnte das liegen? In der Doku steht, dass get bei bestimmten Zeichen den zweiten Parameter ignoriert und aufhört zu lesen. Kann man das umgehen?</p>
<p>Vielen Dank schon mal!</p>
<p>Grüße<br />
Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534123</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 23 Jun 2008 12:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Mon, 23 Jun 2008 12:34:45 GMT]]></title><description><![CDATA[<p>Umgehen tut man das, indem man vor jedem String, den man speichert die Länge mit angibt. Dann weiß man beim Auslesen immer wieviel Byte zu lesen sind.<br />
Ein double liest und schreibt man aber als double. Hier ist natürlich keine Längenangabe nötig, es sei denn man will Daten zwischen Sytemen austauschen, deren Double unterschiedliche Längen haben. In so einem Fall ist binäres lesen und Schreiben aber eh eine schlechte Idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534126</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 23 Jun 2008 12:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Mon, 23 Jun 2008 12:55:23 GMT]]></title><description><![CDATA[<p>du weißt schon, dass man mit stream.str().c_str() nen const char* bekommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534140</guid><dc:creator><![CDATA[mycity]]></dc:creator><pubDate>Mon, 23 Jun 2008 12:55:23 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Mon, 23 Jun 2008 15:40:32 GMT]]></title><description><![CDATA[<p>Hallo Braunstein,</p>
<p>Braunstein schrieb:</p>
<blockquote>
<p>Umgehen tut man das, indem man vor jedem String, den man speichert die Länge mit angibt. Dann weiß man beim Auslesen immer wieviel Byte zu lesen sind.</p>
</blockquote>
<p>Bei Strings klappt das auch. Ich speichere die Länge und dann die Zeichen nud beim Laden lese ich die Länge, setze meinen String auf diese Länge und lese die Zeichen.</p>
<blockquote>
<p>Ein double liest und schreibt man aber als double.</p>
</blockquote>
<p>Genau das wollte ich eigentlich tun. Ich wollte einen Double binär speichern. Die einzige Möglichkeit, die ich gefunden habe, war, den Double in einen char* zu casten:</p>
<pre><code class="language-cpp">sstream.write(reinterpret_cast&lt;char *&gt;(&amp;y), sizeof(y));
</code></pre>
<p>Einlesen geschieht dann so:</p>
<pre><code class="language-cpp">stream.read(reinterpret_cast&lt;char *&gt;(&amp;y), sizeof(y));
</code></pre>
<p>Das funktioniert auch alles prima. Im Programm selbst arbeite ich ja mit Streams. Ich kann die Streams laden und speichern, die Werte sind die gleichen.</p>
<p>Die neue Situation ist, dass die Klasse in einem anderen Programm eingesetzt wird und dass ich hier die Daten nur als char* bekomme (beim laden) und die Daten auch nur in char* schreiben kann. Und dieses hin- und hergeschiebe geht halt in der Hinsicht schief, falls ganz bestimmte Doubles auftreten (konkret: 0.751293) kopiert er den Stream-Inhalt nicht richtig in den char* (siehe obigen Quelltext).</p>
<p>Meine Vermutung ist: In der Binärdarstellung von 0.751293 tritt ein Zeichen auf (vielleicht #0?), wodurch sich der get Befehl dazu veranlasst fühlt, die Übertragung abzubrechen.</p>
<p>@mycity: Danke für den Hinweis. Ich kannte es noch nicht. Aber es hat leider nicht funktioniert. Auch hier wird der Stream abgeschnitten, allerdings an einer anderen Stelle.</p>
<p>Alles sehr komisch...</p>
<p>Schönen Abend!</p>
<p>Ciao<br />
Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534254</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 23 Jun 2008 15:40:32 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Mon, 23 Jun 2008 15:57:10 GMT]]></title><description><![CDATA[<p>Ein stringstream ist nicht dazu da um ein double in ein file zu schreiben. was soll das werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534257</guid><dc:creator><![CDATA[äääääääää]]></dc:creator><pubDate>Mon, 23 Jun 2008 15:57:10 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 12:26:51 GMT]]></title><description><![CDATA[<p>Ja, das macht vom Namen her gesehen irgendwie Sinn ;).</p>
<p>Ok, ich versuche mein Problem nochmal anders zu schildern.</p>
<p>Ich habe eine Struktur, die ich speichern möchte. Zu Speichern sind u.a. Strings, Doubles, long longs usw. Die Klasse wird später in unterschiedlichen Programmen verwendet. Ein Programm erwartet einen Stream und ein anderes Programm erwartet, dass ich in einen char* schreibe und lese.</p>
<p>Welchen Stream-Typ könnte ich sinnvollerweise verwenden?</p>
<p>Ich komme eigentlich von der Programmiersprache Delphi. Dort habe ich eine Klasse TMemoryStream. Mithilfe dieser Klasse kann ich beliebige Typen einfach binär in einen Stream lesen und schreiben. Gibt es eine ähnliche Klasse in C++?</p>
<p>Danke!<br />
Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536314</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 26 Jun 2008 12:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 12:29:22 GMT]]></title><description><![CDATA[<p>PhilippF schrieb:</p>
<blockquote>
<p>...Ich wollte einen Double binär speichern....</p>
</blockquote>
<p>Warum ?<br />
Ist oftmals keine gute Idee.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536319</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 26 Jun 2008 12:29:22 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 12:32:58 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>PhilippF schrieb:</p>
<blockquote>
<p>...Ich wollte einen Double binär speichern....</p>
</blockquote>
<p>Warum ?<br />
Ist oftmals keine gute Idee.</p>
</blockquote>
<p>Welche Alternative würde es geben? Eine andere Alternative, die mir einfällt, wäre ihn als String zu speichern. Nur das macht das Einlesen und Auslesen durch die Konvertierungen wirklich langsam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536322</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 26 Jun 2008 12:32:58 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 13:06:12 GMT]]></title><description><![CDATA[<p>PhilippF schrieb:</p>
<blockquote>
<p>...Eine andere Alternative, die mir einfällt, wäre ihn als String zu speichern. Nur das macht das Einlesen und Auslesen durch die Konvertierungen wirklich langsam.</p>
</blockquote>
<p>Hast Du das mal ausprobiert ?<br />
Also das soll jetzt nicht unfreundlich klingen, aber in mindestens 90% der Fälle hier sind solche &quot;Performanceverlustängste&quot; vollkommen unbegründet ... und in 90% der verbleibenden Fälle gibt's bessere Lösungen für (nachgewiesene) Performanceprobleme.</p>
<p>Du weißt schon, dass Binärspeichern Compiler-/Plattform-/Einstellungs-/...abhängige Files erzeugt, oder ? Wenn Du also später mal diese Files wieder einlesen möchtest, hast Du gute Chancen, die Daten gar nicht mehr einlesen zu können...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536348</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 26 Jun 2008 13:06:12 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 13:29:13 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>PhilippF schrieb:</p>
<blockquote>
<p>...Eine andere Alternative, die mir einfällt, wäre ihn als String zu speichern. Nur das macht das Einlesen und Auslesen durch die Konvertierungen wirklich langsam.</p>
</blockquote>
<p>Hast Du das mal ausprobiert ?</p>
<p>Also das soll jetzt nicht unfreundlich klingen, aber in mindestens 90% der Fälle hier sind solche &quot;Performanceverlustängste&quot; vollkommen unbegründet ... und in 90% der verbleibenden Fälle gibt's bessere Lösungen für (nachgewiesene) Performanceprobleme.</p>
</blockquote>
<p>Keine Sorge, das klingt nicht unfreundlich ;). Ich bin ja auch der, der um Hilfe bittet und da ist mir jede Hilfestellung recht. Aber zu deiner Frage: Ja, die bisherige Lösung sieht so aus, dass die Doubles alle untereinander in eine Textdateigeschrieben werden. Die Analyse mit dem Profiler hat ergeben, dass die Konvertierung String&lt;-&gt;Double die meiste Zeit in Anspruch nimmt. Es sind übrigens sehr viele Messdaten, die über Jahre erfasst werden und dann ausgewertet werden. Da macht sich der Zeitunterschied zur Binärspeicherung bemerkbar, wie wir bereits getestet haben.</p>
<blockquote>
<p>Du weißt schon, dass Binärspeichern Compiler-/Plattform-/Einstellungs-/...abhängige Files erzeugt, oder ? Wenn Du also später mal diese Files wieder einlesen möchtest, hast Du gute Chancen, die Daten gar nicht mehr einlesen zu können...</p>
</blockquote>
<p>Dieses Problem haben wir diskutiert. So häufig wird sich unser System nicht ändern. Falls es dann zu einer Systemänderung kommt, sollen die Daten dann alle in einem anderen Format, beispielsweise als Plaintext gespeichert werden. Liest man diesen Plaintext im neuen System wieder ein, kann er dann wieder - mit der anderen Darstellung - binär gespeichert werden. Dies wäre dann ein einmaliger Vorgang im Gegensatz zum normalen Laden und Speichern, der durchaus häufiger auftauchen könnte.</p>
<p>Grüße<br />
Philipp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536366</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 26 Jun 2008 13:29:13 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 14:04:09 GMT]]></title><description><![CDATA[<p>OK,</p>
<p>das klingt schon besser (Du fällst damit anscheinend in das verbleibende Prozent <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>
<p>Das bedeutet also, dass Ihr ein &quot;internes&quot; und ein &quot;portables&quot; Format habt ... und es geht Dir hier um die Implementation des internen. Finde ich eine gute Lösung (solange ihr regelmäßig Eure Daten im portablen Format sichert).</p>
<p>PhilippF schrieb:</p>
<blockquote>
<p>...Dort habe ich eine Klasse TMemoryStream. Mithilfe dieser Klasse kann ich beliebige Typen einfach binär in einen Stream lesen und schreiben. Gibt es eine ähnliche Klasse in C++? ...</p>
</blockquote>
<p>Nicht, dass ich wüsste. Das Problem ist eben, dass in C++ (leider ? zum Glück ?) kein &quot;Speicherlayout&quot; definiert wurde....</p>
<p>Mich wundert Dein unten geschilderte &quot;Abbruch beim Lesen&quot;. Öffnest du den Stream mit binär-Flag ?<br />
Ich würde mal versuchen, byteweise in ein char[] einzulesen und dann den reinterpret_cast&lt;double*&gt;(&amp;c[0]) darauf zu machen...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536395</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 26 Jun 2008 14:04:09 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 14:27:51 GMT]]></title><description><![CDATA[<p>Habt ihr mal daran gedacht eine DB zu verwenden?<br />
z.B.<br />
<a href="http://www.firebirdsql.org/" rel="nofollow">http://www.firebirdsql.org/</a> (da gibt es eine embedded Version)<br />
<a href="http://www.sqlite.org/" rel="nofollow">http://www.sqlite.org/</a></p>
<p>Das kann einiges vereinfachen und auch die Performance verbessern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536421</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Thu, 26 Jun 2008 14:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 14:32:45 GMT]]></title><description><![CDATA[<p>Ich weiss nicht, obs schon gepostet wurde.<br />
Binär könntest du (müsstest du) das etwa so machen</p>
<pre><code>double myDouble = 0.0;
...

ofstream file(&quot;...&quot;,ios::binary);
file.write(reinterpret_cast&lt;char*&gt;(&amp;myDouble),sizeof(myDouble));

// und das lesen ist ähnlich
double myDouble
ifstream file(&quot;...&quot;,ios::binary);
file.read(reinterpret_cast&lt;char*&gt;(&amp;myDouble),sizeof(myDouble));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1536430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536430</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Thu, 26 Jun 2008 14:32:45 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 14:45:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>erst nochmal vielen Dank! Es ist echt toll, wieviel Mühe sich hier gegeben wird.</p>
<p>Ich habe unser Problem jetzt mal auf ein Minimalbeispiel heruntergebrochen. Hier wird das Schreiben in einen Stream, das Kopieren in den Buffer, das Kopieren vom Buffer in den Stream und das Lesen aus dem Stream durchgeführt. Die ersten beiden Schritte sind nötig für einen Speichervorgang, die zweiten beiden für einen Ladevorgang.</p>
<p>Kurz nochmal zur Erläuterung: Der Klimmzug stream&lt;-&gt;Buffer ist nötig, weil in der Klasse, die das interne Format verwaltet mit Streams gearbeitet wird. Diese Klasse wird in unterschiedlichen Programmen verwendet. Die unterschiedlichen Programme stellen jeweils Schnittstellen zum Laden und Speichern zur Verfügung. Problematisch ist hier, dass die Schnittstelle im einen Programm über char* kommuniziert und das andere Programm über Streams.</p>
<p>Zurück zur Beispielroutine: Die untenstehende Version macht genau das gewünschte. Ersetzt man jetzt die 47.11 durch die andere Zahl, die im Kommentar angegeben ist, kommt Müll heraus.</p>
<p>Ich hoffe, das verdeutlicht mein Problem besser. Bin dankbar für jegliche Tipps</p>
<p>Grüße<br />
Philipp</p>
<p>P.S. Habe gesehen, dass mittlerweile noch mehr Beiträge eingegangen sind. Das geht ja echt schnell ;).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17844">@ihoernchen</a>: Danke, aber das war mir bereits bekannt. Genau so speichere ich in den Stream. Probleme gibt es beim Verschieben ins char*. Eine DB scheidet aus Gründen, die nicht in meiner Hand liegen, leider aus.</p>
<p>P.P.S: Den Tipp mit dem byteweisen einlesen, werde ich mal testen. Glaubst du, dass dies sehr auf die Performance gehen wird?</p>
<pre><code class="language-cpp">void minimalTest()
{
	double y;
	long long x;
	string caption;

	stringstream stream;
	int ssize;

	//Diese Werte sollen gespeichert werden
	caption = &quot;Testbeispiel&quot;;
	y = 47.11; //0.751293;
	x = 100;

	//Schreiben in den Stream
	ssize = (int)caption.length();
	stream.write(reinterpret_cast&lt;char *&gt;(&amp;ssize), sizeof(ssize));
	stream.write(reinterpret_cast&lt;char *&gt;(&amp;caption[0]), ssize);
	stream.write(reinterpret_cast&lt;char *&gt;(&amp;y), sizeof(y));
	stream.write(reinterpret_cast&lt;char *&gt;(&amp;x), sizeof(x));

	//Schreiben in den Buffer
	int size = stream.tellp();
	char* buffer = new char[size];
	stream.seekg(0);
	stream.get(&amp;buffer[0],size);

	//Zurückinitialisieren
	caption = &quot;&quot;;
	y = 0.0;
	x = 0;

	//Buffer -&gt; Stream
	stringstream stream2;
	stream2.write(buffer, size);
	stream2.seekg(0, ios::beg);

	//Lesen aus dem Stream in die Variablen
	stream2.read(reinterpret_cast&lt;char *&gt;(&amp;ssize), sizeof(ssize));
	caption.resize(ssize);
	stream2.read(reinterpret_cast&lt;char *&gt;(&amp;caption[0]), ssize);
	stream2.read(reinterpret_cast&lt;char *&gt;(&amp;y), sizeof(y));
	stream2.read(reinterpret_cast&lt;char *&gt;(&amp;x), sizeof(x));

	//Ausgabe
	cout &lt;&lt; caption &lt;&lt; endl;
	cout &lt;&lt; y &lt;&lt; endl;
	cout &lt;&lt; x &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1536439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536439</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 26 Jun 2008 14:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 15:39:43 GMT]]></title><description><![CDATA[<p>Ändere mal bitte das Schreiben in den Puffer dahin ab.</p>
<pre><code class="language-cpp">size_t size = stream.tellp();
char* buffer = new char[size];
stream.clear();
stream.seekp(0, ios::beg);
stream.readsome(buffer,size);
</code></pre>
<p>So ähnlich mach ich das normalerweise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536481</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 26 Jun 2008 15:39:43 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Thu, 26 Jun 2008 18:06:34 GMT]]></title><description><![CDATA[<p>PhilippF schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//Schreiben in den Buffer
	int size = stream.tellp();
	char* buffer = new char[size];
	stream.seekg(0);
	stream.get(&amp;buffer[0],size);

}
</code></pre>
</blockquote>
<p>Ersetzt das durch</p>
<pre><code class="language-cpp">//Schreiben in den Buffer
    int size = stream.tellp();
    char* buffer = new char[size];
    // falsch, siehe unten
    //stream.seekg(0);
    //stream.get(&amp;buffer[0],size);

    memcpy(buffer,stream.str().c_str(),size);
</code></pre>
<p>weil <a href="http://www.cplusplus.com/reference/iostream/istream/get.html:" rel="nofollow">http://www.cplusplus.com/reference/iostream/istream/get.html:</a><br />
<em><em>istream&amp; get (char</em> s, streamsize n );</em>*<br />
Extracts characters from the stream and stores them as a c-string into the array beginning at s. Characters are extracted until either (n - 1) characters have been extracted or the delimiting character '\n' is found. The extraction also stops if the end of file is reached in the input sequence or if an error occurs during the input operation.<br />
If the delimiting character is found, it is not extracted from the input sequence and remains as the next character to be extracted. Use getline if you want this character to be extracted (and discarded).<br />
The ending null character that signals the end of a c-string is automatically appended at the end of the content stored in s.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536569</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Thu, 26 Jun 2008 18:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Fri, 27 Jun 2008 17:00:03 GMT]]></title><description><![CDATA[<p>Vielen, vielen Dank! Mit memcpy funktioniert es. Die Funktion scheint da rigoroser zu sein. Jetzt wird auch die böse 0.751293 eingelesen :).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1537107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1537107</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 27 Jun 2008 17:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to Stream in char* kopieren on Sat, 28 Jun 2008 13:02:51 GMT]]></title><description><![CDATA[<p>Deswegen hatt ich readsome vorgeschlagen, das hat die Probleme von get auch nicht. <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/1537455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1537455</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Sat, 28 Jun 2008 13:02:51 GMT</pubDate></item></channel></rss>