<?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[Objekt binär schreiben und lesen]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich bin ziemlich neu in c++ und versuche gerade eine Datei binär zu schreiben und zu lesen.</p>
<p>Das schreiben habe ich hinbekommen, zumindest glaube ich das, weil da irgendwelche komischen Zeichen in der Text-Datei sind, obwohl ich mir eher dachte, dass da nur 0 und 1 stehen würden.</p>
<p>Nun versuche ich das auszulesen, was ich eben geschrieben habe und das klappt nicht.<br />
Zuerst, wie ich schreibe:</p>
<pre><code>ofstream outFile(dateiname.c_str(), ios::out | ios::binary);
    if (outFile.good()) {

        outFile.write((char*) &amp;*(this), sizeof (this));

    }
    outFile.close();
</code></pre>
<p>Ist das so korrekt? Ich möchte einfach, dass &quot;this&quot;-Objekt binär abzuspeichern.</p>
<p>Wie ich versuche zu lesen:</p>
<pre><code>string text(&quot;&quot;);
    Matrix mTmp;
    ifstream inFile(dateiname.c_str(), ios::in | ios::binary);

    inFile.seekg(0, ios::end); //Zeiger auf den ersten Block der Datei palzieren
    //mit tellg sagen, ab wo er lesen soll:
    unsigned long fileSize = std::streamoff(inFile.tellg()); //mit 
    inFile.seekg(0, ios::beg); //Das hab ich ausprobiert und er zeigt mir ein  
                              //komisches Zeichen an, sonst zeigt er gar nix an
                              //Viele Fragezeichen im Kopf^^

    char* pBuffer = new char[fileSize];
    inFile.read(pBuffer,1);
    //Auf der Konsole zeigt er mir ein Pfeil nach oben, womit ich nix anfangen  
    //kann. Ich weiss nicht genau, wie man das interpritieren soll, was man 
    //ausließt
    cout &lt;&lt; &quot;Erstes zeichen: &quot; &lt;&lt; *pBuffer &lt;&lt; &quot;\n&quot;;
</code></pre>
<p>Ich hoffe, mir kann jemand erklären, wie man binäre Dateien ausließt und sie interpritiert.<br />
Danke für jeden Tipp.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/328001/objekt-binär-schreiben-und-lesen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 12 May 2026 20:26:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328001.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Sep 2014 10:41:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 10:41:30 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich bin ziemlich neu in c++ und versuche gerade eine Datei binär zu schreiben und zu lesen.</p>
<p>Das schreiben habe ich hinbekommen, zumindest glaube ich das, weil da irgendwelche komischen Zeichen in der Text-Datei sind, obwohl ich mir eher dachte, dass da nur 0 und 1 stehen würden.</p>
<p>Nun versuche ich das auszulesen, was ich eben geschrieben habe und das klappt nicht.<br />
Zuerst, wie ich schreibe:</p>
<pre><code>ofstream outFile(dateiname.c_str(), ios::out | ios::binary);
    if (outFile.good()) {

        outFile.write((char*) &amp;*(this), sizeof (this));

    }
    outFile.close();
</code></pre>
<p>Ist das so korrekt? Ich möchte einfach, dass &quot;this&quot;-Objekt binär abzuspeichern.</p>
<p>Wie ich versuche zu lesen:</p>
<pre><code>string text(&quot;&quot;);
    Matrix mTmp;
    ifstream inFile(dateiname.c_str(), ios::in | ios::binary);

    inFile.seekg(0, ios::end); //Zeiger auf den ersten Block der Datei palzieren
    //mit tellg sagen, ab wo er lesen soll:
    unsigned long fileSize = std::streamoff(inFile.tellg()); //mit 
    inFile.seekg(0, ios::beg); //Das hab ich ausprobiert und er zeigt mir ein  
                              //komisches Zeichen an, sonst zeigt er gar nix an
                              //Viele Fragezeichen im Kopf^^

    char* pBuffer = new char[fileSize];
    inFile.read(pBuffer,1);
    //Auf der Konsole zeigt er mir ein Pfeil nach oben, womit ich nix anfangen  
    //kann. Ich weiss nicht genau, wie man das interpritieren soll, was man 
    //ausließt
    cout &lt;&lt; &quot;Erstes zeichen: &quot; &lt;&lt; *pBuffer &lt;&lt; &quot;\n&quot;;
</code></pre>
<p>Ich hoffe, mir kann jemand erklären, wie man binäre Dateien ausließt und sie interpritiert.<br />
Danke für jeden Tipp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417772</guid><dc:creator><![CDATA[Tambler]]></dc:creator><pubDate>Tue, 16 Sep 2014 10:41:30 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 10:54:13 GMT]]></title><description><![CDATA[<p>Öhh, du und viele andere Anfänger haben da immer so ein doofes Verständnisproblem was Zahlenbasen angeht. Alles im PC ist binär. Wenn da 5 steht, dann ist das bloß anders dargestellt, im Hintergrund ist aber dennoch 00000101 gespeichert. Wenn du dann <code>char</code> s hast in <code>pBuffer</code> (wieso dieses p? Wir sind hier nicht in C), dann ist die Information wie immer binär gespeichert. Wenn du nun aber auf der Konsole Nullen und Einsen ausgeben möchtest, dann musst du noch eine Funktion schreiben, die die Bits ausliest und ausgibt.</p>
<p>Zur Erklärung was <code>ios::binary</code> macht ( <code>ios::in</code> und <code>ios::out</code> sind übrigens sinnlos, du machst schon <code>std::ifstream</code> und <code>std::ofstream</code> , das impliziert das Flag, egal ob du es tatsächlich schreibst):<br />
Auf verschiedenen PCs werden die Zeilenumbrüche unterschiedlich dargestellt. Wir können C++ einfach nur <code>'\n'</code> sagen, und es wählt das korrekte Zeichen für die Plattform aus (ebenso beim Lesen). Beim binären Modus geht man davon aus, dass da Daten (kein Text und daher keine Zeilenumbrüche) drin sind, von denen ein Byte nun einmal denselben Wert haben kann wie <code>'\n'</code> . Daher wird das im Binärmodus nicht mehr umgewandelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417774</guid><dc:creator><![CDATA[std troll]]></dc:creator><pubDate>Tue, 16 Sep 2014 10:54:13 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 10:54:39 GMT]]></title><description><![CDATA[<p>Du kannst nicht mal so eben ohne Weiteres Objekte deiner eigenen Klasse binär abspeichern.</p>
<p>Nehmen wir mal an, du willst einen int binär speichern. Dann stehen in der Datei sagen wir mal 4 Byte (auf einem x86 System), liest du diese 4 Byte und interpretierst sie als int kriegst du deinen Startwert wieder raus.<br />
Schreibst du 4 ints und liest auch wieder 4 ints, kriegst du deine Startwerte.</p>
<p>Schreisbt du jedoch eine Liste von ints (ohne die Länge anzugeben), woher weist du dann wie viele ints du geschrieben hast?<br />
Da musst du dir ein Format überlegen. z.B: du schreisbt erst ein int was die Länge angibt und danach die x-vielen ints. Und so kannst du das auch wieder einlesen.</p>
<p>Hast du jetzt aber ein Objekt eienr Klasse, musst du dieser Klasse auch beibringen wie sie sich selbst binär ein- und ausgibt. Und wenn Zeiger da drin sind, wird das nochmal komplizierter.</p>
<p>Serialisierung ist kein einfaches Thema, aber umgekehrt auch kein ungelöstet Problem.</p>
<p>In deinem Code gibt es zudem ein Problem bei der Ausgabe:</p>
<pre><code>outFile.write((char*) &amp;*(this), sizeof (this));
</code></pre>
<p>Du wandelst dein Objekt in eine CharSequenz um, aber sagst, dass nur die ersten 4 (oder <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /> Bytes/chars geschrieben werden sollen. Müsste *sizeof(<em>this)</em> heissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417775</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 16 Sep 2014 10:54:39 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 11:49:43 GMT]]></title><description><![CDATA[<p>std troll schrieb:</p>
<blockquote>
<p>Öhh, du und viele andere Anfänger haben da immer so ein doofes Verständnisproblem was Zahlenbasen angeht. Alles im PC ist binär. Wenn da 5 steht, dann ist das bloß anders dargestellt, im Hintergrund ist aber dennoch 00000101 gespeichert.</p>
</blockquote>
<p>Es ist aber in C++ wie in x86 irrelevant, dass die Hardware binär rechnet. Davon bekommt man gar nichts mit. Die kleinste adressierbare und manipulierbare Einheit ist typischerweise so groß wie <code>char</code> und hat 256 verschiedene Zustände. Alles im PC ist also 256-är.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417785</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Tue, 16 Sep 2014 11:49:43 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 12:00:36 GMT]]></title><description><![CDATA[<p>vielen Dank für die Antworten.<br />
Die Lösung war tatsächlich (*this).<br />
Ich habe versehntlich die gespeicherte Adresse serialisiert und nicht den Inhalt selbst...</p>
<p>Also er funktioniert super, daher kann ich nicht ganz nachvollziehen, warum ich nicht einfach ohne weiteres serialisieren kann....<br />
Ich musste noch nicht mal die Membervariablen beim Auslesen interpritieren.<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417788</guid><dc:creator><![CDATA[Tambler]]></dc:creator><pubDate>Tue, 16 Sep 2014 12:00:36 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 12:02:26 GMT]]></title><description><![CDATA[<p>Das musst du dann nicht, wenn es die Basisdatentypen(int, char, long, double etc.) sind.</p>
<p>Aber pack mal einen std::string in deine Klasse und mach dein Programm mal zwischendurch aus. Also starte es neu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417789</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 16 Sep 2014 12:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 14:37:29 GMT]]></title><description><![CDATA[<p>ahso, also wenn ich einen enum, oder eine Unterklasse, oder gar nen String habe, hätte das dann komplizierterweise interpritieren müssen?</p>
<p>noch eine kleine Frage, und zwar warum sagt mir die Netbeans IDE, dass folgendes Zuweisung:</p>
<p>char* wert = &quot;Hallo&quot;;<br />
depricated ist? (also verwaltet). Er zeigt ja dennoch auf &quot;H&quot; am Anfang.<br />
Und wie mache ich das &quot;modern&quot; ?<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417816</guid><dc:creator><![CDATA[Tambler]]></dc:creator><pubDate>Tue, 16 Sep 2014 14:37:29 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 14:47:58 GMT]]></title><description><![CDATA[<p>Wenn dann müsste es <em>const char * wert = &quot;...&quot;;</em> heißen, denn auf einen <em>char</em>* kannst du auch schreibend zugreifen, was dann knallen würde.</p>
<p>Und in modernem C++ wäre das <em>std::string wert = &quot;Hallo&quot;;</em></p>
<p>@Nachtrag: Deprecated ist ver<em>alt</em>et und nicht ver<em>walt</em>et.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417817</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 16 Sep 2014 14:47:58 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 14:57:53 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Deprecated ist ver<em>alt</em>et und nicht ver<em>walt</em>et.</p>
</blockquote>
<p>Weder - noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417820</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Tue, 16 Sep 2014 14:57:53 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 15:23:26 GMT]]></title><description><![CDATA[<p>Aber sinngemäß meistens schon. Laut Leo wäre die korrekte Übersetzung &quot;überholt&quot;.</p>
<p>Also veraltet trifft es weit besser verwaltet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417827</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 16 Sep 2014 15:23:26 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 16:47:47 GMT]]></title><description><![CDATA[<p>Ich empfinde den Schritt von <code>ablehnen/mißbilligen</code> zu <code>für veraltet erklären</code> halt als recht groß.<br />
Naja...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417849</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Tue, 16 Sep 2014 16:47:47 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Tue, 16 Sep 2014 17:52:34 GMT]]></title><description><![CDATA[<p>@deprecated: Auch neue Sachen können deprecated werden, wenn sich heraus stellt, dass sie Mist waren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417871</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 16 Sep 2014 17:52:34 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Wed, 17 Sep 2014 07:47:10 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>std troll schrieb:</p>
<blockquote>
<p>Öhh, du und viele andere Anfänger haben da immer so ein doofes Verständnisproblem was Zahlenbasen angeht. Alles im PC ist binär. Wenn da 5 steht, dann ist das bloß anders dargestellt, im Hintergrund ist aber dennoch 00000101 gespeichert.</p>
</blockquote>
<p>Es ist aber in C++ wie in x86 irrelevant, dass die Hardware binär rechnet. Davon bekommt man gar nichts mit. Die kleinste adressierbare und manipulierbare Einheit ist typischerweise so groß wie <code>char</code> und hat 256 verschiedene Zustände. Alles im PC ist also 256-är.</p>
</blockquote>
<p>Ja, das waren noch Zeiten als ich zwischen AL und AH Daten hin- und hergeschoben, XORed usw. hab. Lange her.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417942</guid><dc:creator><![CDATA[EOP]]></dc:creator><pubDate>Wed, 17 Sep 2014 07:47:10 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt binär schreiben und lesen on Wed, 17 Sep 2014 08:02:52 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>@deprecated: Auch neue Sachen können deprecated werden, wenn sich heraus stellt, dass sie Mist waren.</p>
</blockquote>
<p>Okay, ja das triffts was besser, was ihr beiden sagt.</p>
<p>Können wir uns drauf einigen, dass man Deprecated Dinge einfach nach Möglichkeit nicht mehr nutzen soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2417943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2417943</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 17 Sep 2014 08:02:52 GMT</pubDate></item></channel></rss>