<?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[[gelöst] Integer in ofstream]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ein Problem mit der Ausgabe eines 32Bit-Integers in C++ und komme nicht weiter.</p>
<pre><code>using namespace std;
...
ofstream file;
file.open(&quot;out&quot;, ios::binary);

char* buffer = new char[4];
uint32_t x = 0;
*buffer = x;
file.write(buffer,4);

file.close();
</code></pre>
<p>Der Code compiliert ohne Probleme, aber die 32 Bits der Datei &quot;out&quot; sind nicht alle gleich 0. Ich bin mir sicher, man muss den uint32_t noch casten, aber wie? Habe schon vieles ausprobiert.</p>
<p>Mit</p>
<pre><code>file &lt;&lt; x;
</code></pre>
<p>funktioniert es auch nicht.<br />
Wie kann man ganze 32-Bit auf einmal schreiben und nicht nur 8-Bit char?</p>
<p>Vielen Dank!<br />
Grüße,<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/281321/gelöst-integer-in-ofstream</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 16:43:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/281321.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 30 Jan 2011 20:47:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Wed, 02 Feb 2011 14:44:58 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ein Problem mit der Ausgabe eines 32Bit-Integers in C++ und komme nicht weiter.</p>
<pre><code>using namespace std;
...
ofstream file;
file.open(&quot;out&quot;, ios::binary);

char* buffer = new char[4];
uint32_t x = 0;
*buffer = x;
file.write(buffer,4);

file.close();
</code></pre>
<p>Der Code compiliert ohne Probleme, aber die 32 Bits der Datei &quot;out&quot; sind nicht alle gleich 0. Ich bin mir sicher, man muss den uint32_t noch casten, aber wie? Habe schon vieles ausprobiert.</p>
<p>Mit</p>
<pre><code>file &lt;&lt; x;
</code></pre>
<p>funktioniert es auch nicht.<br />
Wie kann man ganze 32-Bit auf einmal schreiben und nicht nur 8-Bit char?</p>
<p>Vielen Dank!<br />
Grüße,<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014430</guid><dc:creator><![CDATA[M*xxx]]></dc:creator><pubDate>Wed, 02 Feb 2011 14:44:58 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Sun, 30 Jan 2011 20:55:03 GMT]]></title><description><![CDATA[<ol>
<li>fstreams können RAII, benutze dies auch.</li>
<li>file &lt;&lt; x funktioniert, evtl musst du aber auch noch ein flush verwenden.</li>
</ol>
<pre><code class="language-cpp">std::ofstream file(&quot;out&quot;, ios::out | ios::binary);
uint32_t x = 0;
file &lt;&lt; x &lt;&lt; std::flush;
</code></pre>
<p>Edit: Du musst binary soweit ich weiß noch mit ios::out verbinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014435</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 30 Jan 2011 20:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Sun, 30 Jan 2011 21:30:51 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>evtl musst du aber auch noch ein flush verwenden.</p>
</blockquote>
<p>Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014461</guid><dc:creator><![CDATA[flusche]]></dc:creator><pubDate>Sun, 30 Jan 2011 21:30:51 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Sun, 30 Jan 2011 22:10:09 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<ol>
<li>fstreams können RAII, benutze dies auch.</li>
</ol>
</blockquote>
<p>Okay, aber ich bin eigentlich kein Freund von OOP, das müsste ich doch dann auch konsequent machen, oder? Oder kann es auch daran liegen, dass mein Code nicht funktioniert?</p>
<p>314159265358979 schrieb:</p>
<blockquote>
<ol start="2">
<li>file &lt;&lt; x funktioniert, evtl musst du aber auch noch ein flush verwenden.</li>
</ol>
<pre><code class="language-cpp">std::ofstream file(&quot;out&quot;, ios::out | ios::binary);
uint32_t x = 0;
file &lt;&lt; x &lt;&lt; std::flush;
</code></pre>
</blockquote>
<p>Funktioniert leider so auch noch nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014472</guid><dc:creator><![CDATA[M*xxx]]></dc:creator><pubDate>Sun, 30 Jan 2011 22:10:09 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Sun, 30 Jan 2011 23:29:29 GMT]]></title><description><![CDATA[<p>M@xxx schrieb:</p>
<blockquote>
<p>Okay, aber ich bin eigentlich kein Freund von OOP,</p>
</blockquote>
<p>Warum benutzt du dann C++?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014487</guid><dc:creator><![CDATA[Manni66]]></dc:creator><pubDate>Sun, 30 Jan 2011 23:29:29 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Mon, 31 Jan 2011 00:08:34 GMT]]></title><description><![CDATA[<p>Weil ich die Erweiterungen wie streams und die Operatoren für die Zeiger ganz praktisch finde.<br />
Aber egal, ich würde mich auch freuen, wenn ich das Problem in C lösen könnte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014494</guid><dc:creator><![CDATA[M*xxx]]></dc:creator><pubDate>Mon, 31 Jan 2011 00:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Mon, 31 Jan 2011 05:51:56 GMT]]></title><description><![CDATA[<p>M@xxx schrieb:</p>
<blockquote>
<p>Der Code compiliert ohne Probleme, aber die 32 Bits der Datei &quot;out&quot; sind nicht alle gleich 0.</p>
</blockquote>
<p>Du setzt ja auch nur das erste deiner 4 chars auf 0.</p>
<pre><code class="language-cpp">std::ofstream file(&quot;out&quot;, ios::binary);
uint32_t x = 0;
file.write(reinterpret_cast&lt;const char*&gt;(&amp;x), sizeof(x));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2014520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014520</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 31 Jan 2011 05:51:56 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Mon, 31 Jan 2011 11:00:07 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::ofstream file(&quot;out&quot;, ios::binary);
uint32_t x = 0;
file.write(reinterpret_cast&lt;const char*&gt;(&amp;x), sizeof(x));
</code></pre>
</blockquote>
<p>Funktioniert so leider auch nicht.<br />
Naja, ich werde es nun anders machen und die chars einzeln schreiben.</p>
<p>Vielen Dank nochmal für eure Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014626</guid><dc:creator><![CDATA[M*xxx]]></dc:creator><pubDate>Mon, 31 Jan 2011 11:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Mon, 31 Jan 2011 11:58:05 GMT]]></title><description><![CDATA[<p>M@xxx schrieb:</p>
<blockquote>
<pre><code>char* buffer = new char[4];
uint32_t x = 0;
*buffer = x;
</code></pre>
</blockquote>
<p>Naja, Du sagst:</p>
<ul>
<li><code>buffer</code> ist ein Array aus <code>char</code> . Ein char ist <em>ein</em> Byte groß.<br />
-Die Zuweisung sagt, fülle den Wert von x in das erste char. x ist 0, also wird das <em>erste</em> char in dem Array auf 0 gesetzt. Die anderen drei bleiben wie sie sind.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2014653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014653</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Mon, 31 Jan 2011 11:58:05 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Mon, 31 Jan 2011 12:18:28 GMT]]></title><description><![CDATA[<p>So geht zumindest das Füllen des buffers. Aber mit den Grenzen aufpassen, cast sollte man besser vermeiden:</p>
<pre><code class="language-cpp">uint32_t x = 0;
*reinterpret_cast&lt;uint32_t*&gt;(buffer) = x;
</code></pre>
<p>Übrigens noch zur ersten Frage:</p>
<pre><code>file &lt;&lt; x;
</code></pre>
<p>übersetzt die Zahl in lesbare Zeichen, aus dem Wert 0 wird also das ASCII-Zeichen für '0' (= 0x30).</p>
<p>Mit dem char-Buffer schreibst Du dagegen direkt den Wert 0 als ASCII 0x00.</p>
<p>Was genau soll Deine Anwendung denn so speichern, und wie soll es nachher wieder gelesen werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014661</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Mon, 31 Jan 2011 12:18:28 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Mon, 31 Jan 2011 13:14:24 GMT]]></title><description><![CDATA[<p>Also ich habe es jetzt so versucht:</p>
<pre><code class="language-cpp">file &lt;&lt; static_cast&lt;char&gt;(x&gt;&gt;24) &lt;&lt; static_cast&lt;char&gt;(x&gt;&gt;16) &lt;&lt; static_cast&lt;char&gt;(x&gt;&gt;8) &lt;&lt; static_cast&lt;char&gt;(x)
</code></pre>
<p>Das funktioniert auch, aber wenn ich versuche diesen Wert wieder zu lesen:</p>
<pre><code class="language-cpp">uint32_t value = 0;
char buffer;

for(int i=3; i&gt;=0; i--)
{
  in &gt;&gt; buffer;  // in ist ifstream
  value |= static_cast&lt;uint32_t&gt;(buffer) &lt;&lt; i*8;
}
</code></pre>
<p>...dann gibt es bei manchen(!) Zahlen Probleme:</p>
<p>Bsp.: 23478123 wird korrekt wieder ausgelesen, 40703756 aber nicht, da kommt 40703767 raus. Wenn man sich die Hexadezimal-Darstellung von 40703756 ansieht, stellt man fest, dass im Speicher zwar korrekt 026D170C steht, aber 026D1717 ausgelesen wird! Als ob das vorletzte Byte aufs letzte kopiert wird.</p>
<p>Frage: Was ist der &quot;Standard&quot;-weg, beliebige Folgen von <em>uint32_t</em>und <em>uint8_t</em>in eine Datei zu schreiben? Muss man dabei berücksichtigen, dass auf x86 LittleEndian verwendet wird, oder spielt das keine Rolle, wenn man immer genau die selbe Anzahl Bytes liest, die man auch geschrieben hat?</p>
<blockquote>
<p>Was genau soll Deine Anwendung denn so speichern, und wie soll es nachher wieder gelesen werden?</p>
</blockquote>
<p>Es sollen Integer gespeichert werden bzw. uint32_t und uint8_t. Also keine characters.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014688</guid><dc:creator><![CDATA[M*xxx]]></dc:creator><pubDate>Mon, 31 Jan 2011 13:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Mon, 31 Jan 2011 18:04:43 GMT]]></title><description><![CDATA[<p>M@xxx schrieb:</p>
<blockquote>
<p>Funktioniert so leider auch nicht.</p>
</blockquote>
<p>Das ist keine ausreichende Fehlerbeschreibung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014863</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 31 Jan 2011 18:04:43 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Mon, 31 Jan 2011 18:10:14 GMT]]></title><description><![CDATA[<p>0c ist das ASCII-Steuerzeichen FF (form feed), also whitespace. Formatiertes Einlesen (mit operator&gt;&gt;) ist da eine schlechte Idee - benutz statt</p>
<pre><code class="language-cpp">in &gt;&gt; buffer;
</code></pre>
<p>halt</p>
<pre><code class="language-cpp">buffer = in.get();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2014864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014864</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 31 Jan 2011 18:10:14 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Tue, 01 Feb 2011 19:26:31 GMT]]></title><description><![CDATA[<p>doppel post</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014962</guid><dc:creator><![CDATA[M*xxx]]></dc:creator><pubDate>Tue, 01 Feb 2011 19:26:31 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Mon, 31 Jan 2011 21:47:36 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>Das ist keine ausreichende Fehlerbeschreibung.</p>
</blockquote>
<p>Sorry.<br />
Ich mach jetzt:</p>
<pre><code class="language-cpp">std::ofstream file(&quot;out&quot;, ios::binary);
uint32_t x = 0;
file.write(reinterpret_cast&lt;const char*&gt;(&amp;x), sizeof(x))
</code></pre>
<pre><code class="language-cpp">std::ifstream infile(&quot;out&quot;, ios::binary);
uint32_t value;
char* buffer = new char[4];
infile.read(buffer,4);
y = static_cast&lt;uint32_t&gt;(*buffer);
std::cout &lt;&lt; y &lt;&lt; std::endl;
</code></pre>
<p>So wird auch <em>0</em> ausgegeben und wenn ich z.B. <em>x=123</em> eingebe, kommt auch <em>123</em> als Ausgabe, aber bei <em>x=12345</em> kommt <em>57</em> heraus, bei <em>x=1234</em> kommt <em>4294967250</em> raus. Da 57 = 0x39 und 12345 = 0x3039 gehe ich davon aus, dass die Funktionen mit der Reihenfolge der Bytes für die integer-Darstellung durcheinanderkommen, bzw. Bytes auslassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2014963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2014963</guid><dc:creator><![CDATA[M*xxx]]></dc:creator><pubDate>Mon, 31 Jan 2011 21:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Tue, 01 Feb 2011 16:24:45 GMT]]></title><description><![CDATA[<p>M@xxx schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::ifstream infile(&quot;out&quot;, ios::binary);
uint32_t value;
char* buffer = new char[4];
infile.read(buffer,4);
y = static_cast&lt;uint32_t&gt;(*buffer);
std::cout &lt;&lt; y &lt;&lt; std::endl;
</code></pre>
</blockquote>
<p>Das ist Blödsinn. Du liest 4 Bytes, füllst dann aber y nur aus dem ersten.</p>
<pre><code class="language-cpp">std::ifstream infile(&quot;out&quot;, ios::binary);
uint32_t value;
infile.read(reinterpret_cast&lt;char*&gt;(&amp;value), sizeof(value))
std::cout &lt;&lt; value &lt;&lt; std::endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2015250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2015250</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 01 Feb 2011 16:24:45 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Integer in ofstream on Wed, 02 Feb 2011 12:28:00 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::ifstream infile(&quot;out&quot;, ios::binary);
uint32_t value;
infile.read(reinterpret_cast&lt;char*&gt;(&amp;value), sizeof(value))
std::cout &lt;&lt; value &lt;&lt; std::endl;
</code></pre>
</blockquote>
<p>Super, so funktioniert es!<br />
Hab den Aufruf jetzt auch in eine Funktion ausgelagert.</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2015583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2015583</guid><dc:creator><![CDATA[M*xxx]]></dc:creator><pubDate>Wed, 02 Feb 2011 12:28:00 GMT</pubDate></item></channel></rss>