<?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[Streams (Binär)]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte in ein und der selben Datei verschiedene Datentypen binär ablegen.</p>
<p>Dazu will ich die Datei wie folgt schreiben:<br />
NummernCode . Content ....</p>
<p>Der NummernCode gibt dabei Preis, welcher Inhalt von welchem Datentypen nachfolgend erwartet werden kann. Zum Beispiel 1 für char / 2 für int usw.</p>
<p>Mit ofstream im Binärmodus lässt sich dass ja denke ich machen?</p>
<p>Mein Problem: Die Schreibfunktion von fstream sieht wie folgt aus:<br />
binaryfile.write((char*) &amp;content, sizeof(datentyp));</p>
<p>Das Ding ist, wieso muss ich meine datentyp Variable nach char casten?<br />
Wenn datentyp z.B. float ist dann möchte ich ja, dass der float in die Binärdatei geschrieben wird und durch den NummernCode später auch wieder als float ausgelesen werden soll und NICHT als char geschrieben werden soll.</p>
<p>T233</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/315426/streams-binär</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 18:04:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/315426.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Apr 2013 08:34:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 08:34:47 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte in ein und der selben Datei verschiedene Datentypen binär ablegen.</p>
<p>Dazu will ich die Datei wie folgt schreiben:<br />
NummernCode . Content ....</p>
<p>Der NummernCode gibt dabei Preis, welcher Inhalt von welchem Datentypen nachfolgend erwartet werden kann. Zum Beispiel 1 für char / 2 für int usw.</p>
<p>Mit ofstream im Binärmodus lässt sich dass ja denke ich machen?</p>
<p>Mein Problem: Die Schreibfunktion von fstream sieht wie folgt aus:<br />
binaryfile.write((char*) &amp;content, sizeof(datentyp));</p>
<p>Das Ding ist, wieso muss ich meine datentyp Variable nach char casten?<br />
Wenn datentyp z.B. float ist dann möchte ich ja, dass der float in die Binärdatei geschrieben wird und durch den NummernCode später auch wieder als float ausgelesen werden soll und NICHT als char geschrieben werden soll.</p>
<p>T233</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311647</guid><dc:creator><![CDATA[T233]]></dc:creator><pubDate>Tue, 02 Apr 2013 08:34:47 GMT</pubDate></item><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 08:47:54 GMT]]></title><description><![CDATA[<blockquote>
<p>Das Ding ist, wieso muss ich meine datentyp Variable nach char casten?</p>
</blockquote>
<p>a) weil byteweise geschrieben wird<br />
b) weil's das Interface von ofstream so will</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311651</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 02 Apr 2013 08:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 09:07:56 GMT]]></title><description><![CDATA[<p>Okay, danke.</p>
<p>Wie könnte ich das &quot;Problem&quot; jetzt am besten lösen? - Gibt es in C++ nicht ähnlich wie in Java verschiedene Methoden/Funktionen (in der STL) um verschiedene Datentypen zu schreiben und zu lesen?</p>
<p>Wenn ich jetzt write Funktion von fstream nutze, heißt dass ja (wenn es nicht irgendwelche fertige Pattern dafür gibt), dass wenn ich einen float habe, ich 4 Byte (32 Bit) einlesen müsste und den Bitsrom dann als float interpretieren, richtig? Gibt es dafür Funktionen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311660</guid><dc:creator><![CDATA[T233]]></dc:creator><pubDate>Tue, 02 Apr 2013 09:07:56 GMT</pubDate></item><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 09:11:01 GMT]]></title><description><![CDATA[<p>Meinst du sowas?</p>
<pre><code class="language-cpp">float my_float_value = 32222.60f;
ofstream.write((char)&amp;my_float_value, sizeof(float));

ifstream.read(&amp;my_float_value, sizeof(float));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2311662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311662</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 02 Apr 2013 09:11:01 GMT</pubDate></item><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 12:05:01 GMT]]></title><description><![CDATA[<p>Ich find das etwas besser.</p>
<pre><code>ofstream.write(reinterpret_cast&lt;const char*&gt;(&amp;my_float_value), sizeof(my_float_value)); 

ifstream.read(reinterpret_cast&lt;char*&gt;(&amp;my_float_value), sizeof(my_float_value));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2311713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311713</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 02 Apr 2013 12:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 12:46:26 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<pre><code>ofstream.write((char)&amp;my_float_value, sizeof(float))
</code></pre>
</blockquote>
<p>Das muss dann aber so heißen:</p>
<pre><code>ofstream.write((char*)&amp;my_float_value, sizeof(float))
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2311730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311730</guid><dc:creator><![CDATA[DarkShadow44]]></dc:creator><pubDate>Tue, 02 Apr 2013 12:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 14:40:15 GMT]]></title><description><![CDATA[<p>Okay, das scheint zu funktionieren. Dann hatte ich es doch richtig. <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>
<p>Ich verstehe nur leider nicht, warum es funktioniert. Könnte mir das jemand erklären?</p>
<p>Nehmen wir mal an, ich habe folgendes:</p>
<pre><code>binaryfile.read((char*)&amp;value, sizeof(float));
</code></pre>
<p>Die nächsten 32 Bit die das Programm nun liest, sind definitiv auch eine abgespeicherte float. Aber woher weiß dass Programm, dass er nun diese sizeof(float)=32 Bit auch als float interpretieren soll? - Er könnte es ja auch genau so gut als 32 Bit Integer interpretieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311775</guid><dc:creator><![CDATA[T233]]></dc:creator><pubDate>Tue, 02 Apr 2013 14:40:15 GMT</pubDate></item><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 14:43:06 GMT]]></title><description><![CDATA[<p>T233 schrieb:</p>
<blockquote>
<p>Aber woher weiß dass Programm, dass er nun diese sizeof(float)=32 Bit auch als float interpretieren soll? - Er könnte es ja auch genau so gut als 32 Bit Integer interpretieren.</p>
</blockquote>
<p>Weil value vom Typ float ist. Wenn value int wäre, würde das Programm den Wert als int interpretieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311777</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 02 Apr 2013 14:43:06 GMT</pubDate></item><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 14:48:54 GMT]]></title><description><![CDATA[<p>Okay. Jetzt geht mir eine Lampe auf. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Danke für die Geduld. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311780</guid><dc:creator><![CDATA[T233]]></dc:creator><pubDate>Tue, 02 Apr 2013 14:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 18:56:06 GMT]]></title><description><![CDATA[<p>Noch eine kurze Frage:<br />
Wenn ihr in einer Schleife die Binärdaten auslest, wie würdet ihr am besten auf das EOF warten?</p>
<p>Ich hab das jetzt so:</p>
<pre><code>while (!binaryfile.eof()) {
binaryfile.read((char*) &amp;tmp, sizeof(short));
...
...
}
</code></pre>
<p>Das Problem dabei ist, dass der letzte Datensatz vor dem EOF immer zwei mal ausgegeben wird, da er das EOF ja anscheinend erst erkennt, wenn er quasi schon &quot;drüber&quot; ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311879</guid><dc:creator><![CDATA[T233]]></dc:creator><pubDate>Tue, 02 Apr 2013 18:56:06 GMT</pubDate></item><item><title><![CDATA[Reply to Streams (Binär) on Tue, 02 Apr 2013 20:16:56 GMT]]></title><description><![CDATA[<p>So sollte (vom logischen Ablauf her) jede Leseschleife aussehen:</p>
<pre><code>while(binaryfile.read(...)) { ...verarbeiten ... }
</code></pre>
<p>Dies benutzt den Rückgabewert von read:<br />
<a href="http://www.cplusplus.com/reference/istream/istream/read/" rel="nofollow">www.cplusplus.com/reference/istream/istream/read/</a><br />
und die Umwandlung von Streams in einem bool'schen Kontext (hier die erste der beiden):<br />
<a href="http://www.cplusplus.com/reference/ios/ios/operator_bool/" rel="nofollow">http://www.cplusplus.com/reference/ios/ios/operator_bool/</a><br />
<a href="http://www.cplusplus.com/reference/ios/ios/operator_not/" rel="nofollow">http://www.cplusplus.com/reference/ios/ios/operator_not/</a></p>
<p>Bei anderen Leseaktionen als read verhält es sich praktisch gleich, außer readsome, get (ohne Argumente), gcount und peek, wo der Rückgabewert eine etwas andere Bedeutung hat. An sich bleibt aber die logische Abfolge 1. Lesen, 2. Prüfen, 3. Verarbeiten auch bei diesen unverändert, bloß die Prüfung schaut anders aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311899</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 02 Apr 2013 20:16:56 GMT</pubDate></item></channel></rss>