<?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[Matrix in einer Binärdatei auslesen?]]></title><description><![CDATA[<p>Hallo, ich beschäftige mich momentan mit dem Thema &quot;Binäre Ein/-Ausgabe&quot; und bin dabei auf folgendes Problem gestoßen :</p>
<p>Zunächst habe ich mir eine Matrix deklariert und sie mit Werten belegt :</p>
<pre><code>const int ZEILEN = 10, SPALTEN = 8;
	double matrix[ZEILEN][SPALTEN];
	for (int i=0; i&lt;ZEILEN; ++i) {
		for (int j=0; j&lt;SPALTEN; ++j) {
			matrix[i][j] = 10;
		}
	}
</code></pre>
<p>Schließlich habe ich diese Matrix binär in eine Textdatei (unformatiert) geschrieben :</p>
<pre><code>ziel.write(reinterpret_cast&lt;const char*&gt;(matrix), sizeof(matrix));
</code></pre>
<p>Ich frage mich, wie ich diese Matrix (bzw. die Werte der Matrix) wieder auslesen kann. Es wäre wirklich toll wenn mir jemand dazu mal eine kleine Erklärung geben könnte, weil ich das Prinzip der Binären Ein/-Ausgabe noch nicht so ganz verstanden habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324941/matrix-in-einer-binärdatei-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 07:58:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324941.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Apr 2014 15:16:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Tue, 08 Apr 2014 15:16:57 GMT]]></title><description><![CDATA[<p>Hallo, ich beschäftige mich momentan mit dem Thema &quot;Binäre Ein/-Ausgabe&quot; und bin dabei auf folgendes Problem gestoßen :</p>
<p>Zunächst habe ich mir eine Matrix deklariert und sie mit Werten belegt :</p>
<pre><code>const int ZEILEN = 10, SPALTEN = 8;
	double matrix[ZEILEN][SPALTEN];
	for (int i=0; i&lt;ZEILEN; ++i) {
		for (int j=0; j&lt;SPALTEN; ++j) {
			matrix[i][j] = 10;
		}
	}
</code></pre>
<p>Schließlich habe ich diese Matrix binär in eine Textdatei (unformatiert) geschrieben :</p>
<pre><code>ziel.write(reinterpret_cast&lt;const char*&gt;(matrix), sizeof(matrix));
</code></pre>
<p>Ich frage mich, wie ich diese Matrix (bzw. die Werte der Matrix) wieder auslesen kann. Es wäre wirklich toll wenn mir jemand dazu mal eine kleine Erklärung geben könnte, weil ich das Prinzip der Binären Ein/-Ausgabe noch nicht so ganz verstanden habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393404</guid><dc:creator><![CDATA[Benutzer123]]></dc:creator><pubDate>Tue, 08 Apr 2014 15:16:57 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Tue, 08 Apr 2014 16:18:58 GMT]]></title><description><![CDATA[<p>So ziemlich genau gleich, bloß mit read statt write und natürlich keinem Cast zu <code>const char*</code> , sondern zu <code>char*</code> . Hast du es einfach mal ausprobiert? Gab es irgendwelche Probleme?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393422</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 08 Apr 2014 16:18:58 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Tue, 08 Apr 2014 21:10:12 GMT]]></title><description><![CDATA[<p>Ja, ich habe das eben ausprobiert und auch schon im Debug-Modus getestet :</p>
<pre><code>while (quelle.read(reinterpret_cast&lt;char*&gt;(matrix1), sizeof(matrix1)))
</code></pre>
<p>Scheinbar überspringt er die Schleife direkt, da er nichts auslesen kann. Das &quot;write&quot; hat aber funktioniert, da alle Dateien einen Inhalt haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393500</guid><dc:creator><![CDATA[Benutzer123]]></dc:creator><pubDate>Tue, 08 Apr 2014 21:10:12 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Tue, 08 Apr 2014 21:42:03 GMT]]></title><description><![CDATA[<p>Dann zeig mal mehr Code. Die eine Zeile sieht prinzipiell erst einmal richtig aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393506</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 08 Apr 2014 21:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 15:27:24 GMT]]></title><description><![CDATA[<p>Okay, das ist im Prinzip mein ganzer Code :</p>
<pre><code>const int ZEILEN = 10, SPALTEN = 8;
	double matrix[ZEILEN][SPALTEN];
	for (int i=0; i&lt;ZEILEN; ++i) {
		for (int j=0; j&lt;SPALTEN; ++j) {
			matrix[i][j] = 10;
		}
	}
	// Abfrage der Daten
	std::string a;
	std::cout &lt;&lt; &quot;Geben Sie den gewuenschten Dateinamen ein: &quot;;
	std::cin &gt;&gt; a;
	std::ofstream(a.c_str());

	// binär
	std::ofstream ziel;
	ziel.open(a.c_str(), std::ios::binary||std::ios::out);
	if (!ziel) {
		std::cerr &lt;&lt; &quot;Die Datei &quot; 
			&lt;&lt; a.c_str() &lt;&lt; &quot; konnte nicht geoeffnet werden!&quot;;
		std::exit(-1);
	}
	ziel.write(reinterpret_cast&lt;const char*&gt;(matrix), sizeof(matrix));

	std::ifstream quelle;
	int i = {0};
	double matrix1[ZEILEN][SPALTEN];
	quelle.open(a.c_str(), std::ios::binary||std::ios::in);
	while (quelle.read(reinterpret_cast&lt;char*&gt;(matrix1), sizeof(matrix1)))
		std::cout &lt;&lt; matrix1[i] &lt;&lt; std::endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2393622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393622</guid><dc:creator><![CDATA[Benutzer123]]></dc:creator><pubDate>Wed, 09 Apr 2014 15:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 15:49:58 GMT]]></title><description><![CDATA[<p>Mach deine Variablen mal lokaler!</p>
<p>Ungestestet:</p>
<pre><code>{
    // binär
    std::ofstream ziel;
    ziel.open(a.c_str(), std::ios::binary||std::ios::out);
    if (!ziel) {
        std::cerr &lt;&lt; &quot;Die Datei &quot;
            &lt;&lt; a.c_str() &lt;&lt; &quot; konnte nicht geoeffnet werden!&quot;;
        std::exit(-1);
    }
    ziel.write(reinterpret_cast&lt;const char*&gt;(matrix), sizeof(matrix));
  }

  {
    std::ifstream quelle;
    int i = {0};
    double matrix1[ZEILEN][SPALTEN];
    quelle.open(a.c_str(), std::ios::binary||std::ios::in);
    while (quelle.read(reinterpret_cast&lt;char*&gt;(matrix1), sizeof(matrix1)))
        std::cout &lt;&lt; matrix1[i] &lt;&lt; std::endl; 
  }
</code></pre>
<p>P.S.: Außerdem ist deine Ausgabe am Ende komisch. Du gibst ja nur das (0,0)er Element aus. Du willst wohl eher:</p>
<pre><code>while(leseaktion)
{
  schleifen über alle elemente
  {
     ausgabe;
  }
}
</code></pre>
<p>Solch eine Ausgabe ist auch immer etwas, das man schön in eine eigene Funktion packen kann. Wenn die erst einmal richtig gemacht ist, dann passieren solche Fehler bei der Ausgabe gar nicht mehr, wenn man immer diese Funktion benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393627</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Apr 2014 15:49:58 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 17:34:32 GMT]]></title><description><![CDATA[<pre><code>std::ios::binary||std::ios::out
</code></pre>
<p>sieht auch seltsam aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393667</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Wed, 09 Apr 2014 17:34:32 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 17:42:26 GMT]]></title><description><![CDATA[<p>KN4CK3R schrieb:</p>
<blockquote>
<pre><code>std::ios::binary||std::ios::out
</code></pre>
<p>sieht auch seltsam aus</p>
</blockquote>
<p>Das mit dem <code>||std::ios::out</code> koennte man sich sparen, aber es ist an sich nicht falsch. Oder was meinst du genau?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393672</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Apr 2014 17:42:26 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 17:45:30 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>KN4CK3R schrieb:</p>
<blockquote>
<pre><code>std::ios::binary||std::ios::out
</code></pre>
<p>sieht auch seltsam aus</p>
</blockquote>
<p>Das mit dem <code>||std::ios::out</code> koennte man sich sparen, aber es ist an sich nicht falsch. Oder was meinst du genau?</p>
</blockquote>
<p>Das ist || nicht |!<br />
std::ios::binary||std::ios::out sollte 1 ergeben und nicht std::ios::binary|std::ios::out</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393674</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 09 Apr 2014 17:45:30 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 17:53:30 GMT]]></title><description><![CDATA[<p>genau, das meinte ich. <s>sollte doch eigentlich auch eine Warnung erzeugen weil es doch bool erzeugt oder nicht?</s></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393676</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Wed, 09 Apr 2014 17:53:30 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 17:52:23 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>KN4CK3R schrieb:</p>
<blockquote>
<pre><code>std::ios::binary||std::ios::out
</code></pre>
<p>sieht auch seltsam aus</p>
</blockquote>
<p>Das mit dem <code>||std::ios::out</code> koennte man sich sparen, aber es ist an sich nicht falsch. Oder was meinst du genau?</p>
</blockquote>
<p>Das ist || nicht |!</p>
</blockquote>
<p>Ups, irgendwie bin ich blind heute.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393677</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Apr 2014 17:52:23 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 18:14:50 GMT]]></title><description><![CDATA[<p>Irgendwie bin ich echt zu dumm dafür.. Ich bekomme jetzt zwar was ausgegeben, aber nur die Adressen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;cstdlib&gt;

int main (void) {
	const int ZEILEN = 10, SPALTEN = 8;
	double matrix[ZEILEN][SPALTEN];
	for (int i=0; i&lt;ZEILEN; ++i) {
		for (int j=0; j&lt;SPALTEN; ++j) {
			matrix[i][j] = 10;
		}
	}
	// Abfrage der Daten
	std::string a;
	std::cout &lt;&lt; &quot;Geben Sie den gewuenschten Dateinamen ein: &quot;;
	std::cin &gt;&gt; a;
	std::ofstream(a.c_str());

	{ 
    // binär 
    std::ofstream ziel; 
    ziel.open(a.c_str(), std::ios::binary||std::ios::out); 
		if (!ziel) { 
			std::cerr &lt;&lt; &quot;Die Datei &quot; 
				&lt;&lt; a.c_str() &lt;&lt; &quot; konnte nicht geoeffnet werden!&quot;; 
			std::exit(-1); 
		} 
		ziel.write(reinterpret_cast&lt;const char*&gt;(*matrix), sizeof(matrix)); 
   } 

  { 
    std::ifstream quelle; 
    int i = {0}; 
    double matrix1[ZEILEN][SPALTEN]; 
    quelle.open(a.c_str(), std::ios::binary||std::ios::in); 
    while (quelle.read(reinterpret_cast&lt;char*&gt;(matrix1), sizeof(matrix1))) {
		int anz = ZEILEN * SPALTEN;
		for (size_t i=0; i&lt;anz; ++i) {
			std::cout &lt;&lt; *(matrix+i) &lt;&lt; std::endl;
		}
	}

  }

	std::system(&quot;PAUSE&quot;);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2393685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393685</guid><dc:creator><![CDATA[Benutzer123]]></dc:creator><pubDate>Wed, 09 Apr 2014 18:14:50 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 18:29:05 GMT]]></title><description><![CDATA[<p>Hier mal eine flotte Korrektur deines Codes:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;cstdlib&gt;

int main ()
{
  const int ZEILEN = 10, SPALTEN = 8;
  double matrix[ZEILEN][SPALTEN];
  for (int i=0; i&lt;ZEILEN; ++i) 
    {
      for (int j=0; j&lt;SPALTEN; ++j) 
        {
          matrix[i][j] = 10;
        }
    }
  // Abfrage der Daten
  std::string a;
  std::cout &lt;&lt; &quot;Geben Sie den gewuenschten Dateinamen ein: &quot;;
  std::cin &gt;&gt; a;
  std::ofstream(a.c_str());

  {
    // binär
    std::ofstream ziel(a.c_str(), std::ios::binary);
    if (!ziel) {
      std::cerr &lt;&lt; &quot;Die Datei &quot;
                &lt;&lt; a.c_str() &lt;&lt; &quot; konnte nicht geoeffnet werden!&quot;;
      std::exit(-1);
    }
    ziel.write(reinterpret_cast&lt;const char*&gt;(*matrix), sizeof(matrix));
  }

  {
    std::ifstream quelle(a.c_str(), std::ios::binary);
    double matrix1[ZEILEN][SPALTEN];
    while (quelle.read(reinterpret_cast&lt;char*&gt;(matrix1), sizeof(matrix1))) 
      {
        for (size_t x = 0; x &lt; ZEILEN; ++x) 
          {
            for (size_t y = 0; y &lt; SPALTEN; ++y)
              std::cout &lt;&lt; matrix1[x][y] &lt;&lt; '\t';
            std::cout &lt;&lt; '\n';
          }
      }   
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2393689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393689</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Apr 2014 18:29:05 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 18:30:32 GMT]]></title><description><![CDATA[<p>Machs doch so, wie du sie auch befüllst mit zwei Schleifen?<br />
Außerdem hast du immernoch den Fehler mit den Flags bei open(...) drin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393690</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Wed, 09 Apr 2014 18:30:32 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 18:52:02 GMT]]></title><description><![CDATA[<p>Dankeschön Leute, jetzt funktioniert es. Ich habe den Code von SeppJ benutzt und es klappt einwandfrei. <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>PS: Auch danke für den Tipp bezüglich der Variablen, die ich lokal halten soll, das bringt echt mehr Struktur und sorgt für weniger Fehler. <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/2393697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393697</guid><dc:creator><![CDATA[Benutzer123]]></dc:creator><pubDate>Wed, 09 Apr 2014 18:52:02 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Wed, 09 Apr 2014 19:13:29 GMT]]></title><description><![CDATA[<p>Benutzer123 schrieb:</p>
<blockquote>
<p>PS: Auch danke für den Tipp bezüglich der Variablen, die ich lokal halten soll, das bringt echt mehr Struktur und sorgt für weniger Fehler. <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>
</blockquote>
<p>Ist dir denn klar, was (ausser dem &quot;||&quot; statt &quot;|&quot;) falsch war? Du hattest einen ofstream, der die Datei geoeffnet hatte. Dann hast du einen ifstream genommen, der die gleiche Datei aufgemacht hat. Der ofstream hatte die Datei aber noch zum Schreiben offen. Die meisten Systeme erlauben so etwas nicht und daher schlug das Oeffnen fehl. Dadurch, dass die beiden Streams lokaler gemacht wurden, wurde die Datei vom ofstream automatisch geschlossen, als dieser seinen Gueltigkeitsbereich verliess und daher funktionierte dann das Oeffnen mit dem ifstream.<br />
Theoretisch haette man auch ein close() auf dem ofstream machen koennen, aber mit den Gueltigkeitsbereichen ist es, wie du selber bemerkt hast, sauberer und weniger fehleranfaellig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393706</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 09 Apr 2014 19:13:29 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix in einer Binärdatei auslesen? on Thu, 10 Apr 2014 14:13:02 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Dann hast du einen ifstream genommen, der die gleiche Datei aufgemacht hat. Der ofstream hatte die Datei aber noch zum Schreiben offen. Die meisten Systeme erlauben so etwas nicht und daher schlug das Oeffnen fehl.</p>
</blockquote>
<p>Die meisten? Fällt dir außer Windows noch eins ein? Keine Klugscheißerei, ehrliche Frage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2393834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2393834</guid><dc:creator><![CDATA[skatolschnüffler]]></dc:creator><pubDate>Thu, 10 Apr 2014 14:13:02 GMT</pubDate></item></channel></rss>