<?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[Variablenwerte in Datei speichern]]></title><description><![CDATA[<p>Hi,<br />
bisher speicher ich alle Daten immer in Textform und konvertiere z.B. Integer- oder Double-Variablen immer in einen string um sie zu speichern und zurück um sie zu lesen. Das ist erstens Aufwand für's Programm und zweitens Speicherplatzverschwendung, da der String einer Double-Variable ja wesentlich größer als die Variable ist.<br />
Normalerweise sind ja in Dateien (z.B. Bitmaps) direkt die Variablenwerte aneinandergereiht und jeder Byte ist ein Wert. Dann braucht man auch nicht wie bei meiner Textform, Abgrenzungen zwischen den einzelnen Werten, damit diese nicht ineinander übergehen. Ich google wohl irgendwie falsch, weil ich bisher noch keine Möglichkeit gefunden habe, Variablen mit fstream zu behandeln. Wie mache ich so etwas denn und gibt es dafür Templates, damit ich auch z.B. komplette Objekte am Stück hintereinander in eine Datei aufreihen und wieder einfach auslesen kann?</p>
<p>Ich hoffe ich störe mit meinen Fragen niemanden in der Weihnachtszeit.</p>
<p>Vielen Dank für die Hilfe im Voraus. <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/topic/257144/variablenwerte-in-datei-speichern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 07:41:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257144.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Dec 2009 16:54:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Wed, 23 Dec 2009 16:55:17 GMT]]></title><description><![CDATA[<p>Hi,<br />
bisher speicher ich alle Daten immer in Textform und konvertiere z.B. Integer- oder Double-Variablen immer in einen string um sie zu speichern und zurück um sie zu lesen. Das ist erstens Aufwand für's Programm und zweitens Speicherplatzverschwendung, da der String einer Double-Variable ja wesentlich größer als die Variable ist.<br />
Normalerweise sind ja in Dateien (z.B. Bitmaps) direkt die Variablenwerte aneinandergereiht und jeder Byte ist ein Wert. Dann braucht man auch nicht wie bei meiner Textform, Abgrenzungen zwischen den einzelnen Werten, damit diese nicht ineinander übergehen. Ich google wohl irgendwie falsch, weil ich bisher noch keine Möglichkeit gefunden habe, Variablen mit fstream zu behandeln. Wie mache ich so etwas denn und gibt es dafür Templates, damit ich auch z.B. komplette Objekte am Stück hintereinander in eine Datei aufreihen und wieder einfach auslesen kann?</p>
<p>Ich hoffe ich störe mit meinen Fragen niemanden in der Weihnachtszeit.</p>
<p>Vielen Dank für die Hilfe im Voraus. <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/1826902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1826902</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Wed, 23 Dec 2009 16:55:17 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Wed, 23 Dec 2009 16:56:26 GMT]]></title><description><![CDATA[<p>Du meinst Binär? :xmas1: :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1826904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1826904</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Wed, 23 Dec 2009 16:56:26 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Wed, 23 Dec 2009 17:07:07 GMT]]></title><description><![CDATA[<p>Das kannst du recht bequem mit Boost.Serialization machen.</p>
<p>Little Programmer schrieb:</p>
<blockquote>
<p>Ich hoffe ich störe mit meinen Fragen niemanden in der Weihnachtszeit.</p>
</blockquote>
<p>Wer gerade keine Zeit hat, Fragen zu beantworten, wird hier sicherlich auch nicht im Forum unterwegs sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1826911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1826911</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Wed, 23 Dec 2009 17:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Wed, 23 Dec 2009 19:19:50 GMT]]></title><description><![CDATA[<p>Mit 'ios::binary' den Stream öffnen und mittels der read() bzw. write()-Methoden die Daten binär lesen/schreiben, s.a. <a href="http://www.cplusplus.com/reference/iostream/istream/read/" rel="nofollow">http://www.cplusplus.com/reference/iostream/istream/read/</a><br />
bzw.<br />
<a href="http://www.cplusplus.com/reference/iostream/ostream/write/" rel="nofollow">http://www.cplusplus.com/reference/iostream/ostream/write/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1826977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1826977</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 23 Dec 2009 19:19:50 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Thu, 24 Dec 2009 03:14:21 GMT]]></title><description><![CDATA[<p>Sorry, vielleicht bin ich ja zu doof, aber read und write arbeiten (auch laut den Links) doch auch nur mit char-Arrays und nicht mit anderen Variablen. Oder übersehe ich da gerade den Trick dahinter, wie man damit doch alles mögliche speichern kann?</p>
<p>@ Th69, ich habe bisher nur soviel über ios::binary gelesen, dass dort Zeilenumsprünge ignoriert werden. Ändert sich sonst noch etwas entscheidendes?</p>
<p>Frohe Weihnachten! :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827136</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Thu, 24 Dec 2009 03:14:21 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Thu, 24 Dec 2009 08:34:02 GMT]]></title><description><![CDATA[<p>Little Programmer schrieb:</p>
<blockquote>
<p>Oder übersehe ich da gerade den Trick dahinter, wie man damit doch alles mögliche speichern kann?</p>
</blockquote>
<p>Casten, memcpy usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827156</guid><dc:creator><![CDATA[Unreg]]></dc:creator><pubDate>Thu, 24 Dec 2009 08:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Tue, 29 Dec 2009 12:40:10 GMT]]></title><description><![CDATA[<p>Hab das jetzt mal getestet, aber gibt es eine Möglichkeit, ein komplettes Objekt auf einmal zu casten? Jede Membervariable eines Objekts erst zu zerpflücken und beim auslesen wieder zusammenzufügen ist ziemlich umständlich. Doch weder mit const_cast &lt;char*&gt; (&amp;Objekt), noch mit char(Objekt) konnte mein Kompiler etwas anfangen. Gibt es da eine direkte Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829267</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Tue, 29 Dec 2009 12:40:10 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Tue, 29 Dec 2009 12:50:57 GMT]]></title><description><![CDATA[<p><a href="http://www.cppreference.com/wiki/keywords/reinterpret_cast" rel="nofollow">http://www.cppreference.com/wiki/keywords/reinterpret_cast</a><br />
Objekte so in ne Datei schreiben geht aber nur, wenn diese selber keine Objekte enthalten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829269</guid><dc:creator><![CDATA[rülps]]></dc:creator><pubDate>Tue, 29 Dec 2009 12:50:57 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Tue, 29 Dec 2009 13:07:27 GMT]]></title><description><![CDATA[<p>Danke. Und nochmal ne Frage, ich versuch mich gerade an normalen int, double usw. Variablen. Aber bei double bin ich auf ein Problem gestoßen. Eine double-Variable ist größer als eine char, das heißt, wenn ich mit:</p>
<pre><code class="language-cpp">konfiguration.put(char(7563.5725));
//oder auch nur den int-Wert:
konfiguration.put(char(7563));
</code></pre>
<p>speichere, dann erhalte ich im ersten Fall egal ob ich es als int oder als double auslese 127 und im zweiten -117 als Wert. Wie kann ich also eine double oder eine große int über soviele char-Stellen wie nötig speichern und auslesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829284</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Tue, 29 Dec 2009 13:07:27 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Tue, 29 Dec 2009 13:13:37 GMT]]></title><description><![CDATA[<blockquote>
<p>invalid reinterpret_cast from type `Test' to type `std::string'|</p>
</blockquote>
<p>Erhalte ich, egal in was ich mit reinterpret_cast konvertieren will.</p>
<pre><code class="language-cpp">string Text = reinterpret_cast&lt;string&gt; (Objekt);
konfiguration.write(Text.c_str(), Text.length);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1829291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829291</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Tue, 29 Dec 2009 13:13:37 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Tue, 29 Dec 2009 15:39:51 GMT]]></title><description><![CDATA[<p>Du mußt den reinterpret_cast auf 'char *' direkt beim ersten Parameter durchführen, z.B.</p>
<pre><code class="language-cpp">double d = 42.14;

konfiguration.write(reinterpret_cast&lt;char *&gt;(&amp;d), sizeof(d)); // wichtig: der Adreßoperator &amp; !!!
</code></pre>
<p>Analog dann für andere einfache Datentypen (statt double).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829400</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 29 Dec 2009 15:39:51 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Tue, 29 Dec 2009 15:41:33 GMT]]></title><description><![CDATA[<p>std::string kannst du so nicht speicher</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829401</guid><dc:creator><![CDATA[und]]></dc:creator><pubDate>Tue, 29 Dec 2009 15:41:33 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Tue, 29 Dec 2009 15:43:29 GMT]]></title><description><![CDATA[<p>Das binäre Speichern von Daten kann je nach Plattform, etc. zu Problemen führen. Warum nimmst du nicht eine ganz &quot;normale&quot; Konfigurationsdatei und speicherst deine Strings als Text? Damit sparst du dir eine menge Ärger <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/1829402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829402</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Tue, 29 Dec 2009 15:43:29 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Tue, 29 Dec 2009 23:51:12 GMT]]></title><description><![CDATA[<p>Ich will ja eine Möglichkeit haben, z.B. bei einem komplexen programm, in dem viele Objekte existieren ein Speicherabbild aller objekte zu erstellen. Wenn ich nun mit Memberfunktionen jedes Objekt in seine Einzelteile zerlege und wieder zusammensetze, kann sich da leicht ein Fehler unterschmuggeln. Mir wäre es lieb gewesen, wenn ich direkt den Speicherbereich eines Objekts in einer Datei kopieren kann. Na gut, dann muss es halt mit zerpflücken gehen. Ich versuch das jetzt nochmal mit dem reinterpret_cast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829588</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Tue, 29 Dec 2009 23:51:12 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Wed, 30 Dec 2009 00:09:47 GMT]]></title><description><![CDATA[<p>Hm, ich denke mal in eine Richtung funktionierts jetzt, allerdings kann ich das nicht sicher sagen, da ich die Datei nicht mehr auslesen kann:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

void Speichern()
{
    std::ofstream konfiguration;
    konfiguration.open(&quot;blubb.dat&quot;, ios::out);
    konfiguration.put(char(9));
    double d = 7563.5725;
    konfiguration.write(reinterpret_cast&lt;char *&gt;(&amp;d), sizeof(d));
    //konfiguration.put(char(7563.5725));
    if(!konfiguration)
        cout &lt;&lt; &quot;Konnte nicht speichern.\n&quot;;
}

void Laden()
{
    int Toastbrot = 0;
    double Brot = 0;
    char Temp = 0;
    char TempArray[100] = {0};
    std::fstream konfiguration(&quot;blubb.dat&quot;);

    if(!konfiguration)
    {
        cout &lt;&lt; &quot;Konnte nicht laden.\n&quot;;
    } else {

    konfiguration.get(Temp);
    Toastbrot = int (Temp);
    cout &lt;&lt; &quot;\n&quot; &lt;&lt; Toastbrot &lt;&lt; endl;

    double d = 7563.5725; //Nur damit Länge bestimmen kann
    //konfiguration.seekg (1, ios::beg);
    konfiguration.read(TempArray, sizeof(d));
    Brot = reinterpret_cast&lt;double&gt;(TempArray)
    //Brot = atof(TempArray);
    cout &lt;&lt; &quot;\n&quot; &lt;&lt; Brot &lt;&lt; endl;
    }

}

int main()
{
    Speichern();
    Laden();
    system(&quot;PAUSE&quot;);
    return 0;
}
</code></pre>
<p>Die Rückumwandlung in eine double ist so nicht zulässig, aber mit atof erhalte ich &quot;0&quot; als Wert. Irgendwie hab ich das Ganze noch nicht ganz durchschaut. Kann mir jemand weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829607</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Wed, 30 Dec 2009 00:09:47 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Wed, 30 Dec 2009 06:46:11 GMT]]></title><description><![CDATA[<p>Little Programmer schrieb:</p>
<blockquote>
<p>Ich will ja eine Möglichkeit haben, z.B. bei einem komplexen programm, in dem viele Objekte existieren ein Speicherabbild aller objekte zu erstellen.</p>
</blockquote>
<p>Dazu müsstest du ne andere Sprache nehmen, z.B. Python oder Java.</p>
<p>Little Programmer schrieb:</p>
<blockquote>
<p>Die Rückumwandlung in eine double ist so nicht zulässig, aber mit atof erhalte ich &quot;0&quot; als Wert. Irgendwie hab ich das Ganze noch nicht ganz durchschaut. Kann mir jemand weiterhelfen?</p>
</blockquote>
<p>Ja, schau dir mal an wie Daten binär gespeichert werden, dann verstehst du vielleicht auch, was du da speicherst.</p>
<p><a href="http://de.wikipedia.org/wiki/Dualsystem" rel="nofollow">http://de.wikipedia.org/wiki/Dualsystem</a><br />
<a href="http://de.wikipedia.org/wiki/Integer_%28Datentyp%29" rel="nofollow">http://de.wikipedia.org/wiki/Integer_(Datentyp)</a><br />
<a href="http://de.wikipedia.org/wiki/IEEE_754" rel="nofollow">http://de.wikipedia.org/wiki/IEEE_754</a></p>
<pre><code class="language-cpp">double a=342.5231;
	char* bla=reinterpret_cast&lt;char*&gt;(&amp;a);

	double b=*(reinterpret_cast&lt;double*&gt;(bla));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1829669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829669</guid><dc:creator><![CDATA[nightCoder]]></dc:creator><pubDate>Wed, 30 Dec 2009 06:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Wed, 30 Dec 2009 06:53:42 GMT]]></title><description><![CDATA[<p><a href="http://de.wikipedia.org/wiki/Zeiger_%28Informatik%29" rel="nofollow">http://de.wikipedia.org/wiki/Zeiger_(Informatik)</a> dereferenzieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829671</guid><dc:creator><![CDATA[nightCoder]]></dc:creator><pubDate>Wed, 30 Dec 2009 06:53:42 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Wed, 30 Dec 2009 13:26:19 GMT]]></title><description><![CDATA[<p>Hallo LittleProgrammer,</p>
<p>vergiß das char-Array!</p>
<p>Auch beim Lesen einfach:</p>
<pre><code class="language-cpp">double d; 

konfiguration.read(reinterpret_cast&lt;char *&gt;(&amp;d), sizeof(d)); // wichtig: der Adreßoperator &amp; !!!

cout &lt;&lt; d &lt;&lt; endl;
</code></pre>
<p>Genau wie beim Schreiben -)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829803</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 30 Dec 2009 13:26:19 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Wed, 30 Dec 2009 13:49:52 GMT]]></title><description><![CDATA[<p>@ NightCoder, wieso weiße ich der double einen Zeiger auf eine double zu?</p>
<pre><code class="language-cpp">double b=*(reinterpret_cast&lt;double*&gt;(bla));
</code></pre>
<p>und @ Th69, wenn ich das richtig sehe, dann lese ich die Datei doch in die double aus und caste die dann in in einen charakter. ist das nicht falsch herum?</p>
<pre><code class="language-cpp">konfiguration.read(reinterpret_cast&lt;char *&gt;(&amp;d), sizeof(d));
</code></pre>
<p>Die beiden Sachen sind mir absolut unklar. Ich würde mir das so denken, ka, wieso es nicht so ist:</p>
<pre><code class="language-cpp">double* b=*(reinterpret_cast&lt;double*&gt;(bla));
//bzw.
double b=*(reinterpret_cast&lt;double&gt;(bla));

//und Th69s Code käm ich so gar nicht auf die Idee zu schreiben.
</code></pre>
<p>Wo liegt denn immernoch mein Denkfehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829818</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Wed, 30 Dec 2009 13:49:52 GMT</pubDate></item><item><title><![CDATA[Reply to Variablenwerte in Datei speichern on Wed, 30 Dec 2009 14:00:44 GMT]]></title><description><![CDATA[<p>Nein, probiere es einfach mal aus.<br />
Dann erkennst du evtl. auch, was du bzgl. des Castens anscheinend noch nicht ganz verstanden hast...</p>
<p>Der Parameter &quot;(const) char *&quot; bedeutet nur, daß die Funktion einen Zeiger auf eine beliebige Bytefolge erwartet (nicht, daß es sich um ein char-Array handeln muß!).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829825</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 30 Dec 2009 14:00:44 GMT</pubDate></item></channel></rss>