<?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[Datenverlust von int nach char* mit reinterpret_cast?]]></title><description><![CDATA[<p>Hallo,</p>
<p>erzeugt der folgende Code Datenverlust?</p>
<pre><code class="language-cpp">int bla = 320;
char* dest = reinterpret_cast&lt;char*&gt;(&amp;bla);
</code></pre>
<p>Wollte das selber überprüfen, aber atoi() liefert mir nur 0 zurück, obwohl aber die Variable <em>dest</em> einen Wert beinhaltet. (Nach zahlreichen Minuten nicht erfolgreicher Binäraddition der einzelnen Bytes habe ich es aufgegeben). Da mittlerweile die Meinungen einiger Leute auseinander gegangen sind, frage ich hier.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199513/datenverlust-von-int-nach-char-mit-reinterpret_cast</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 16:50:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199513.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 Dec 2007 22:21:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Mon, 03 Dec 2007 22:21:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>erzeugt der folgende Code Datenverlust?</p>
<pre><code class="language-cpp">int bla = 320;
char* dest = reinterpret_cast&lt;char*&gt;(&amp;bla);
</code></pre>
<p>Wollte das selber überprüfen, aber atoi() liefert mir nur 0 zurück, obwohl aber die Variable <em>dest</em> einen Wert beinhaltet. (Nach zahlreichen Minuten nicht erfolgreicher Binäraddition der einzelnen Bytes habe ich es aufgegeben). Da mittlerweile die Meinungen einiger Leute auseinander gegangen sind, frage ich hier.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414508</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Mon, 03 Dec 2007 22:21:05 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Mon, 03 Dec 2007 22:26:31 GMT]]></title><description><![CDATA[<p>Er erzeugt keinen Datenverlust. Du kannst den char* jederzeit mit reinterpret_cast zurückumwandeln. Allerdings natürlich nicht mit atoi!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414509</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 03 Dec 2007 22:26:31 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Mon, 03 Dec 2007 22:33:27 GMT]]></title><description><![CDATA[<p>Okay, das selbe hatte ich mir auch gedacht. Da es mir jetzt auch gelungen ist, den char* wieder in einen Integer umzuwandeln (Ist mir vorher wohl ein dummer Fehler unterlaufen), hat sich die Frage nun von selbst beantwortet. Anlass war der, dass mir beim Speichern von Datenstrukturen hoher Anzahl in eine Datei ständig ein Byte zuviel geschrieben wird, obwohl das bei geringen Datenmengen nicht der Fall ist. Mittlerweile bin ich am Ende meines Lateins, aber das gehört dann sicherlich in einen neuen Thread.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414511</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Mon, 03 Dec 2007 22:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 06:44:47 GMT]]></title><description><![CDATA[<p>Vielleicht zeigst du mal den Code, der dir zu viele Daten geschrieben hat.</p>
<p>Btw, diese Art der Umwandlung ist techniasch sinnlos - wenn du eine Zahlenwert wirklich in Binärform aufbewahren willst, lass ihn in der int-Variable (mit reinterpret_cast&lt;&gt; änderst du den tatsächlichen Wert nicht, sondern deutest ihn nur anders); wenn du ihn in lesbarer Form haben willst, wandle ihn vernünftig um (siehe FAQ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414546</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 04 Dec 2007 06:44:47 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 08:00:52 GMT]]></title><description><![CDATA[<p>mikey schrieb:</p>
<blockquote>
<p>...beim Speichern von Datenstrukturen hoher Anzahl in eine Datei ...</p>
</blockquote>
<p>Um diese (und zahllose andere= Probleme zu vermeiden, rate ich immer dringendst davon ab, das &quot;native Binärformat&quot; zu verwenden !<br />
Entweder macht man das Ganze &quot;lesbar&quot; (so, wie es die operator&lt;&lt;()-Funktionen üblicherweise machen) oder denkt sich ein eigenes plattformunabhängiges Binärformat aus.</p>
<p>Denk nur daran, was mit Deinen riesigen Datenmengen passiert, wenn der nächste Compiler seine Daten anders ablegt oder andere Paddingstrategien verwendet oder ...<br />
Dann schreibst Du Dir an einer Binärwandlung die Finger wund und brauchst 10mal soviel Zeit wie Du jetzt in ein vernünftiges Protokoll gesteckt hättest.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414578</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 04 Dec 2007 08:00:52 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 11:45:41 GMT]]></title><description><![CDATA[<p>mikey schrieb:</p>
<blockquote>
<p>Anlass war der, dass mir beim Speichern von Datenstrukturen hoher Anzahl in eine Datei ständig ein Byte zuviel geschrieben wird, obwohl das bei geringen Datenmengen nicht der Fall ist</p>
</blockquote>
<p>Hast du vergessen, beim Schreiben das Flag für Binär zu setzen, da sonst das Zeichen '\n' (der Wert 0x0A) in &quot;\r\n&quot; (d.h. 0x0D 0x0A) verwandelt wird ?(zumindestens unter Windows!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414726</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 04 Dec 2007 11:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 13:43:15 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Vielleicht zeigst du mal den Code, der dir zu viele Daten geschrieben hat.</p>
</blockquote>
<p>An der Kompaktzusammenfassung des Codes werde ich mich heute ranmachen, da er ziemlich verstrickt ist. Ich werde ihn dann heute hier posten.</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>Btw, diese Art der Umwandlung ist techniasch sinnlos - wenn du eine Zahlenwert wirklich in Binärform aufbewahren willst, lass ihn in der int-Variable (mit reinterpret_cast&lt;&gt; änderst du den tatsächlichen Wert nicht, sondern deutest ihn nur anders);</p>
</blockquote>
<p>In dem oben gezeigten Zusammenhang war es natürlich sinnlos. Im Projekt allerdings muss ich die Daten deshalb umwandeln, weil <em>std::ifstream::read()</em> mit einem <em>char</em>* auf den zu schreibenden Buffer zeigt.</p>
<p>Allerdings muss ich an dieser Stelle betonen, dass ich den ursprünglichen Fehler mit dem zuviel geschriebenem Byte gestern doch noch beseitigt habe, ich hatte einem <em>sizeof()</em> versehentlich die falsche Variable übergeben. Dummerweise hat es sich dann nur bei größeren Datenmengen bemerkbar gemacht.</p>
<p>Doch die Geschichte ist noch nicht vorbei, es existiert dann noch ein Fehler, der dem ursprünglichen Problemposting dennoch durchaus gerecht wird. Da wird auch ein Byte zuviel geschrieben, allerdings nur bei Strings mit einer Länge von exakt 10 Zeichen incl. Terminierung. Aber wiegesagt, den Code werde ich heute in verkürzter Form noch posten.</p>
<p>Simon schrieb:</p>
<blockquote>
<p>Um diese (und zahllose andere= Probleme zu vermeiden, rate ich immer dringendst davon ab, das &quot;native Binärformat&quot; zu verwenden !</p>
</blockquote>
<p>Naja, ich speichere Datenstrukturen mit built-in Datentypen, also PODs ab. Bisjetzt besteht natürlich noch die Gefahr, dass die Datenbank auf einer anderen Platform fehlerhaft eingelesen wird, da da die Datentypen eine andere Größe aufweisen. Da es aber vorläufig nur auf meinem System gearbeitet wird, denke ich, ist diese Problematik vorerst zu vernachlässigen.</p>
<p>Simon schrieb:</p>
<blockquote>
<p>oder denkt sich ein eigenes plattformunabhängiges Binärformat aus.</p>
</blockquote>
<p>Da habe ich bereits eine kleine Klasse implementiert, sie repräsentiert einen Integer, der sich intern auf 4 chars stützt, die somit auf jeder Platform die selbe Größe aufweisen sollten. Viel besser wären aber natürlich die Datentypen von Boost, muss ich mir mal angucken.</p>
<p>Th schrieb:</p>
<blockquote>
<p>Hast du vergessen, beim Schreiben das Flag für Binär zu setzen, da sonst das Zeichen '\n' (der Wert 0x0A) in &quot;\r\n&quot; (d.h. 0x0D 0x0A) verwandelt wird ?(zumindestens unter Windows!)</p>
</blockquote>
<p>Ne, habe ich nicht. Deine Theorie ist aber trotzdem interessant, da es sich bei dem zuviel geschriebenem Byte tatsächlich um 0x0D handelt.</p>
<p>Okay, erstmal danke soweit für die Hilfe. Später werde ich euch dann den Code posten, wer es sich antun möchte... :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414782</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 04 Dec 2007 13:43:15 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 13:53:34 GMT]]></title><description><![CDATA[<p>mikey schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Btw, diese Art der Umwandlung ist techniasch sinnlos - wenn du eine Zahlenwert wirklich in Binärform aufbewahren willst, lass ihn in der int-Variable (mit reinterpret_cast&lt;&gt; änderst du den tatsächlichen Wert nicht, sondern deutest ihn nur anders);</p>
</blockquote>
<p>In dem oben gezeigten Zusammenhang war es natürlich sinnlos. Im Projekt allerdings muss ich die Daten deshalb umwandeln, weil <em>std::ifstream::read()</em> mit einem <em>char</em>* auf den zu schreibenden Buffer zeigt.</p>
</blockquote>
<p>OK, dann will ich nichts gesagt haben (ich hab in deinem Beitrag wohl das &amp; überlesen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414786</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 04 Dec 2007 13:53:34 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 14:41:39 GMT]]></title><description><![CDATA[<p>mikey schrieb:</p>
<blockquote>
<p>...</p>
<p>Simon schrieb:</p>
<blockquote>
<p>Um diese (und zahllose andere= Probleme zu vermeiden, rate ich immer dringendst davon ab, das &quot;native Binärformat&quot; zu verwenden !</p>
</blockquote>
<p>Naja, ich speichere Datenstrukturen mit built-in Datentypen, also PODs ab. Bisjetzt besteht natürlich noch die Gefahr, dass die Datenbank auf einer anderen Platform fehlerhaft eingelesen wird, da da die Datentypen eine andere Größe aufweisen. Da es aber vorläufig nur auf meinem System gearbeitet wird, denke ich, ist diese Problematik vorerst zu vernachlässigen....</p>
</blockquote>
<p>Ich weise Dich nur auf einen hungrigen Tiger mit scharfen Zähnen hinter dem nächsten Busch hin ... es ist Deine Entscheidung, ob Du ihn ignorieren oder 2 Stunden in eine andere Route investieren möchtest.<br />
Übrigens: Dein Ausgangsproblem gehört schon zu den erstem Schrammen, die er Dir verpasst hat ! Du solltest also nicht davon ausgehen, dass ich hier reine Theoriekonstrukte aufbaue...</p>
<p>Kleine Tipps:<br />
a) &quot;bis jetzt&quot;, &quot;vorläufig&quot;, &quot;vorerst&quot; sind immer die Einschätzungen, die sich als erstes als falsch erweisen.<br />
b) schon eine andere Compilereinstellung bzgl. des Alignments kann reichen - es braucht keinen Umstieg auf Quantencomputer, um hier Probleme zu erzeugen.<br />
c) Wenn Deine Dateien wirklich sooo groß sind (dass Du an diese Form der Platzoptimierung denken musst), wird eine spätere Migration umso mühsamer.</p>
<p><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="😃"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414816</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 04 Dec 2007 14:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 14:55:09 GMT]]></title><description><![CDATA[<p>Eigentlich hatte ich ja aufgrund des Umfangs garnicht eingeplant, dieses Problem hier zu schildern, aber auf CStolls Bitte mache ich es natürlich gerne.</p>
<p>Der folgende Code ist soweit vollständig, es wird lediglich die Implementation der Klasse DbLoader nicht gezeigt. Da es sich aber um einen Schreibfehler beim Abspeichern handelt, ist nur relevant, dass die Klasse die vorher geschriebenen Werte wieder einliest. Deshalb habe ich den Code soweit mal kommentiert, alles andere müsste sich von selbst erklären.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;DbLoader.h&quot;

/* ***********Arbeitsablauf*************
 * 1. Mapnamenlänge (SegIDLength) abspeichern. (4 Bytes)
 * 2. Mapnamen (SegID) abspeichern (Variabel)
 * 3. Strukturlänge schreiben (entspricht 4 Bytes)
 * 4. Anschließend die Struktur speichern. (Variabel)
 * 5. Danach wieder von vorne
 */

namespace project
{
	const char* SegID[25] = {
		&quot;Segment1&quot;,
		&quot;Zwei&quot;,
		&quot;Drei&quot;,
		&quot;Vier&quot;, 
		&quot;Fuenf&quot;, 
		&quot;Sechs&quot;,
		&quot;Sieben&quot;,
		&quot;Acht&quot;,
		&quot;Neun&quot;, 
		&quot;Zehn&quot;,
		&quot;Elf&quot;,
		&quot;Zwoelf&quot;, 
		&quot;Dreizehn&quot;,
		&quot;Vierzehn&quot;,
		&quot;Fuenfzehn&quot;, // Sobald dieser String geschrieben wird, kommt ein Byte zuviel mit (0x0D)
		&quot;Sechszehn&quot;, // Hier ebenfalls, da es sich auch um 10 Zeichen incl. '\0' handelt
		&quot;Siebzehn&quot;, 
		&quot;Achtzehn&quot;,
		&quot;Neunzehn&quot;,
		&quot;zwanzig&quot;,
		&quot;einundzwanzig&quot;,
		&quot;zweiundzwanzig&quot;,
		&quot;dreiundzwanzig&quot;,
		&quot;vierundzwanzig&quot;,
		&quot;fuenfundzwanzig&quot; };

	struct buff
	{
		unsigned int mapID;
		unsigned int monsterID;
		unsigned int PosX;
		unsigned int PosY;
	};

	std::ofstream out (&quot;testdatei.txt&quot;, std::ios::app, std::ios::binary);
	void SaveDb(const char* SegID, const buff &amp;buffer)
	{
		// Länge des Segment-ID Strings ermitteln (SegID)
		std::size_t SegIDLength = std::strlen(SegID)+1;
		out.seekp(std::ios_base::beg);

		// Die ermittelte Länge abspeichern:
		out.write(reinterpret_cast&lt;char*&gt;(&amp;SegIDLength), sizeof(std::size_t));

		// Nun folgt das Schreiben des ID-Strings (SegID)
		out.write(SegID, SegIDLength);

		// Größe der übergebenen Struktur ermitteln:
		std::size_t BufferSize = sizeof(buffer);

		// Größe in Datei schreiben...
		out.write(reinterpret_cast&lt;const char*&gt;(&amp;BufferSize), sizeof(std::size_t));

		// Und jetzt die Struktur. Man könnte sie auch mithilfe einer Schleife mehrmals
		// pro Segment-ID schreiben, welche dann durch den weiter unten demonstrierten
		// Indexoperator ausgelesen werden kann:
		out.write(reinterpret_cast&lt;const char*&gt;(&amp;buffer), BufferSize);
	}
}

int main()
{
	// Abzuspeichernde Struktur mit Werten initialisieren...
	project::buff ibuff = {1,2,3,4};

	// Diese Struktur wird beim Einlesen der Daten aufgefüllt. 
	// (Erfolgt beim Anwenden des [] Operators)
	project::buff buuf2;

	// Für jede Segment-ID (25 Stück) jeweils einmal ibuff abspeichern:
	for(short i=0; i&lt;25; i++) 
		project::SaveDb(project::SegID[i], ibuff);

	if(project::out.is_open()) project::out.close();
	std::ifstream in (&quot;testdatei.txt&quot;, std::ios::binary);

	if(!in.good()) std::cout &lt;&lt; &quot;Datei konnte...&quot;;

	// Templateklasse auf die Struktur parametrisieren. Erster Parameter
	// gibt den Dateistreamhandle über, der zweite legt die Struktur fest,
	// die beim Einlesen der Werte standardmäßig befüllt werden soll:
	DbLoader &lt;project::buff&gt; dbloader(&amp;in, &amp;buuf2);

	try {
		// Gewünschte Strukturen einlesen:
		// Die zweite Dimension gibt an, welche Struktur zur dazugehörigen ID eingelesen werden soll.
		// Da vorher jeweils nur eine pro ID geschrieben wurde, nehmen wir immer [1].
		std::cout &lt;&lt; dbloader[&quot;Segment1&quot;]		[1]-&gt;mapID;
		std::cout &lt;&lt; dbloader[&quot;Dreizehn&quot;]		[1]-&gt;PosX;
		// Crash!
		std::cout &lt;&lt; dbloader[&quot;Fuenfzehn&quot;]		[1]-&gt;monsterID;

		// Ebenfalls Fehler, da durch das einmal zuviel geschriebene Byte die
		// gesamte nachfolgende Datenstruktur der Datei beschädigt wird:
		std::cout &lt;&lt; dbloader[&quot;vierundzwanzig&quot;] [1]-&gt;PosY;

		// Würde man zu &quot;Fuenfzehn&quot; und &quot;Sechszehn&quot; noch ein Zeichen anhängen, damit
		// es nichtmehr 10 Zeichen sind (und somit also ein Byte zuviel geschrieben wird)
		// müsste die obige Einleseaktion folgende Ausgabe auf dem Bildschirm generieren:
		// 1234
	}
	catch(std::ios_base::failure ex)
	{
		std::cout &lt;&lt; &quot;exception: &quot; &lt;&lt; ex.what();
		std::cin.get();
	}
	in.close();
	std::cin.get();
}
</code></pre>
<p>Im Hexeditor offenbart sich der Fehler. Überspringen wir mal die vorhergehenden SegmentIDs, und fangen wir mal ID 'Vierzehn' an:</p>
<pre><code>Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000180                    09 00 00 00 56 69 65 72 7A 65        ....Vierze
00000190  68 6E 00 10 00 00 00 01 00 00 00 02 00 00 00 03  hn..............
000001A0  00 00 00 04 00 00 00 0D 0A 00 00 00 46 75 65 6E  ............Fuen
000001B0  66 7A 65 68 6E                                   fzehn usw...
</code></pre>
<p>Dier ersten vier Bytes vor 'Vierzehn' geben die Stringlänge an. Danach folgt der String + Terminierung. Die nächsten vier Bytes geben die Länge der nachfolgenden Struktur an, also 10 00 00 00. Dann folgen die 16 Bytes der Datenstruktur. Die '1234' kann man da schön erkennen:</p>
<pre><code>00000190  01 00 00 00 02 00 00 00 03
000001A0  00 00 00 04 00 00 00 ---&gt; 0D &lt;---
</code></pre>
<p>Unmittelbar danach kommt auch schon das Byte zuviel: 0D. Hierbei lässt sich erkennen, dass das Byte bereits vor dem String 'Fuenfzehn' geschrieben wird. Wäre der String keine 10 Zeichen lang, würde dieses Byte auch garnicht geschrieben werden.</p>
<p>Falls es sich wirklich noch jemand antun möchte, gibt's <a href="http://www.tears-of-blood.eu/DbLoader.rar" rel="nofollow">hier</a> die Projektdatei (MSVS Express 2008) zum Download.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414828</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 04 Dec 2007 14:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 15:01:16 GMT]]></title><description><![CDATA[<p>mikey schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::ofstream out (&quot;testdatei.txt&quot;, std::ios::app, std::ios::binary);
</code></pre>
</blockquote>
<p>Ich hoffe mal, das zweite Komma dort ist ein Schreibfehler (wobei ich nichtmal wußte, daß der ofstream-Ctor 3 Parameter schlucken kann). Dort solltest du die Flags besser durch | trennen.</p>
<p>(und dann wird das Problem auch verständlich - du öffnest den Stream im Text-Modus (was aus dem ios::binary interpretiert wird, kann ich nur raten) - und dadurch wird die Längenangabe 10 (=0x0A='\n') nach den üblichen Konvertierungsregeln zu \r\n erweitert)</p>
<p>btw, seekp() wird ignoriert, wenn du die Datei im Append-Modus öffnest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414834</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 04 Dec 2007 15:01:16 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 15:05:31 GMT]]></title><description><![CDATA[<p>Ohje, das war's tatsächlich. Was für 'ne Lapalie... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Also auf das wäre ich denke ich mal im Leben nicht gekommen... CStoll, ich danke dir^^ Und auch den anderen und Th, der den Fehler tatsächlich richtig gedeutet hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414841</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 04 Dec 2007 15:05:31 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 17:52:59 GMT]]></title><description><![CDATA[<p>Ja, ich habe schon 20 Jahre Programmiererfahrung -)</p>
<p>P.S. bei einigen STL-Implementierungen kann man als 3. Parameter die Unix-Dateiberechtigungen angeben (welche dann bei DOS/Windows-Systemen ignoriert wird), default ist dann 0666 (the number of the beast)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414933</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 04 Dec 2007 17:52:59 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 18:25:44 GMT]]></title><description><![CDATA[<p>Verwendest du zufällig einen Borland-Compiler? <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="🙂"
    /><br />
Beim BCB6 mit STLport war das zumindest auch so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414952</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 04 Dec 2007 18:25:44 GMT</pubDate></item><item><title><![CDATA[Reply to Datenverlust von int nach char* mit reinterpret_cast? on Tue, 04 Dec 2007 18:27:35 GMT]]></title><description><![CDATA[<p>Tja, anscheinend hat Visual Studio auch seine Finger mit im Spiel gehabt. Denn laut Standardreferenz erwartet ifstream::read lediglich zwei Parameter:<br />
<a href="http://cplusplus.com/reference/iostream/ifstream/ifstream.html" rel="nofollow">http://cplusplus.com/reference/iostream/ifstream/ifstream.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1414953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1414953</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 04 Dec 2007 18:27:35 GMT</pubDate></item></channel></rss>