<?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[Binärdatei mit unterschiedlichen Datentypen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich muss eine Binärdatei auslesen, die _immer_ wie folgt aufgebaut ist:</p>
<p>char[4] (magic number)<br />
unsigned char x<br />
unsigned char y<br />
unsigned char[x][y]</p>
<p>Ich schaffs allerdings nur, die Magic Number auszulesen, und zwar damit:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;
int main()
{ 
    cout &lt;&lt; &quot;starting&quot; &lt;&lt; endl;
    fstream ConfigFile(&quot;map.cfg&quot;, ios::in|ios::out|ios::binary);
    cout &lt;&lt; &quot;vor if&quot; &lt;&lt; endl;
    if (ConfigFile.is_open())
    {

        ConfigFile.seekg(0, ios::end);
        unsigned long FileSize = streamoff(ConfigFile.tellg());
        ConfigFile.seekg(0, ios::beg);
        cout &lt;&lt; &quot;filesize:&quot; &lt;&lt; FileSize &lt;&lt; endl;

        char* pBuffer = new char[FileSize];
        ConfigFile.read(pBuffer,8);
        cout &lt;&lt;&quot;Puffer&quot; &lt;&lt; endl;

        for (int i = 0; i&lt;5; i++){
         cout &lt;&lt; pBuffer[i];

        }
          cout &lt;&lt; endl;

        delete [] pBuffer;
    } 
}
</code></pre>
<p>(Die paar couts sind zum debuggen)<br />
Die Ausgabe des Inhalts ( cout &lt;&lt; pBuffer[i];) funktioniert bei der Magic number (also den ersten 4 zeichen), aber dann wird nichts mehr ausgegeben, obwohl zumindest die zwei zeichen nach der Magic Number noch einfache Zahlenwerte sein sollten.</p>
<p>Ich gehe mal davon aus, dass es an den unsigned chars liegt, aber warum interpretiert mein Programm die bei der Ausgabe nicht? Die Bitgröße ist dieselbe wie bei signed chars (also den ersten 4 zeichen)...</p>
<p>Weiß jemand rat?</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268067/binärdatei-mit-unterschiedlichen-datentypen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 04:46:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268067.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Jun 2010 15:49:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Binärdatei mit unterschiedlichen Datentypen on Thu, 03 Jun 2010 15:49:45 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich muss eine Binärdatei auslesen, die _immer_ wie folgt aufgebaut ist:</p>
<p>char[4] (magic number)<br />
unsigned char x<br />
unsigned char y<br />
unsigned char[x][y]</p>
<p>Ich schaffs allerdings nur, die Magic Number auszulesen, und zwar damit:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;
int main()
{ 
    cout &lt;&lt; &quot;starting&quot; &lt;&lt; endl;
    fstream ConfigFile(&quot;map.cfg&quot;, ios::in|ios::out|ios::binary);
    cout &lt;&lt; &quot;vor if&quot; &lt;&lt; endl;
    if (ConfigFile.is_open())
    {

        ConfigFile.seekg(0, ios::end);
        unsigned long FileSize = streamoff(ConfigFile.tellg());
        ConfigFile.seekg(0, ios::beg);
        cout &lt;&lt; &quot;filesize:&quot; &lt;&lt; FileSize &lt;&lt; endl;

        char* pBuffer = new char[FileSize];
        ConfigFile.read(pBuffer,8);
        cout &lt;&lt;&quot;Puffer&quot; &lt;&lt; endl;

        for (int i = 0; i&lt;5; i++){
         cout &lt;&lt; pBuffer[i];

        }
          cout &lt;&lt; endl;

        delete [] pBuffer;
    } 
}
</code></pre>
<p>(Die paar couts sind zum debuggen)<br />
Die Ausgabe des Inhalts ( cout &lt;&lt; pBuffer[i];) funktioniert bei der Magic number (also den ersten 4 zeichen), aber dann wird nichts mehr ausgegeben, obwohl zumindest die zwei zeichen nach der Magic Number noch einfache Zahlenwerte sein sollten.</p>
<p>Ich gehe mal davon aus, dass es an den unsigned chars liegt, aber warum interpretiert mein Programm die bei der Ausgabe nicht? Die Bitgröße ist dieselbe wie bei signed chars (also den ersten 4 zeichen)...</p>
<p>Weiß jemand rat?</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906418</guid><dc:creator><![CDATA[Megingost]]></dc:creator><pubDate>Thu, 03 Jun 2010 15:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei mit unterschiedlichen Datentypen on Thu, 03 Jun 2010 16:08:54 GMT]]></title><description><![CDATA[<p>Zunächst einmal liest du 8 Zeichen</p>
<pre><code class="language-cpp">ConfigFile.read(pBuffer,8);
</code></pre>
<p>gibst in der Schleife allerdings nur 5 Zeichen aus</p>
<pre><code class="language-cpp">for (int i = 0; i&lt;5; i++)
</code></pre>
<p>8 Zeichen reichen übrigens nicht aus, wenn du Zeilenumbrüche zusätzlich in<br />
deiner Datei hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906426</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Thu, 03 Jun 2010 16:08:54 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei mit unterschiedlichen Datentypen on Thu, 03 Jun 2010 16:26:02 GMT]]></title><description><![CDATA[<p>Ach, das hab ich übersehn..</p>
<p>Die Werte stehn in der Binärdatei direkt nebeneinander, ohne irgendein Trennzeichen.</p>
<p>Ich habe die Zahlen jetzt geändert, ich lese &quot;FileSize&quot; zeichen ein und gebe &quot;FileSize&quot; zeichen aus. Allerdings stimmen die Werte nach der Magic number immer noch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906432</guid><dc:creator><![CDATA[Megingost]]></dc:creator><pubDate>Thu, 03 Jun 2010 16:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei mit unterschiedlichen Datentypen on Thu, 03 Jun 2010 16:29:30 GMT]]></title><description><![CDATA[<p>na lies halt erst 4 dann eines und nochmal ein byte aus. wo ist das problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906434</guid><dc:creator><![CDATA[ssxxxxxxxxyyyyyyy]]></dc:creator><pubDate>Thu, 03 Jun 2010 16:29:30 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei mit unterschiedlichen Datentypen on Fri, 04 Jun 2010 06:37:00 GMT]]></title><description><![CDATA[<p>Die Werte werden schon stimmen, allerdings ist pBuffer ja char*. D.h. cout versucht das als string zu interpretieren und bricht dann natürlich die Ausgabe bei der ersten 0 (Terminierung) ab.<br />
Caste den Puffer bei der Ausgabe nach void* und du solltest alles sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906583</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 04 Jun 2010 06:37:00 GMT</pubDate></item></channel></rss>