<?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[Problem beim Schreiben in Binärdatei]]></title><description><![CDATA[<p>Moin,</p>
<p>mein Problem besteht darin, dass ich zwar mit einer Funktion eine Binärdatei auslesen, aber mit dem Gegenstück keine Daten in die Binärdatei schreiben kann.<br />
Zum Beispiel, wenn ich eine Binärdatei erstelle und dann dort Zahlen reinschreiben will, führt er zwar die Schreibfunktion ohne Fehlermeldung aus, aber danach steht wie vorher nichts in der Binärdatei drin, und ich hab kein blasen schimmer wo der Fehler in der Funktion stecken könnte, würde mich daher freuen, wenn einer eine Idee hat, wo der Fehler zu suchen und zu finden ist.</p>
<p>Hier ein Codebeispiel, dass das Problem veranschaulicht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
using namespace std;

int main()
{
//  Erstelle einer Binärdatei
    string create_file = &quot;&quot;;

    cout&lt;&lt; &quot;Name fuer zu generierende Datei: &quot;;
    cin&gt;&gt;create_file;

    fstream* m_file;

    m_file= new fstream(create_file.c_str(), ios:: in | ios:: out | ios:: binary | ios:: trunc);

//  Etwas in die Binärdatei schreiben
    int x = 4;
    int y = 0;

    const void *addr1 = &amp;x;
    streampos size = sizeof(x);

    m_file -&gt; write(reinterpret_cast&lt;const char*&gt;(addr1),size);
    if(m_file -&gt; fail())
        return 1;
//Es wird kein Fehler zurückgegeben, aber es wird auch nichts
//in die erstellte Binärdatei geschrieben.

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/216506/problem-beim-schreiben-in-binärdatei</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 00:41:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/216506.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Jun 2008 23:28:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Tue, 24 Jun 2008 23:28:22 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>mein Problem besteht darin, dass ich zwar mit einer Funktion eine Binärdatei auslesen, aber mit dem Gegenstück keine Daten in die Binärdatei schreiben kann.<br />
Zum Beispiel, wenn ich eine Binärdatei erstelle und dann dort Zahlen reinschreiben will, führt er zwar die Schreibfunktion ohne Fehlermeldung aus, aber danach steht wie vorher nichts in der Binärdatei drin, und ich hab kein blasen schimmer wo der Fehler in der Funktion stecken könnte, würde mich daher freuen, wenn einer eine Idee hat, wo der Fehler zu suchen und zu finden ist.</p>
<p>Hier ein Codebeispiel, dass das Problem veranschaulicht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
using namespace std;

int main()
{
//  Erstelle einer Binärdatei
    string create_file = &quot;&quot;;

    cout&lt;&lt; &quot;Name fuer zu generierende Datei: &quot;;
    cin&gt;&gt;create_file;

    fstream* m_file;

    m_file= new fstream(create_file.c_str(), ios:: in | ios:: out | ios:: binary | ios:: trunc);

//  Etwas in die Binärdatei schreiben
    int x = 4;
    int y = 0;

    const void *addr1 = &amp;x;
    streampos size = sizeof(x);

    m_file -&gt; write(reinterpret_cast&lt;const char*&gt;(addr1),size);
    if(m_file -&gt; fail())
        return 1;
//Es wird kein Fehler zurückgegeben, aber es wird auch nichts
//in die erstellte Binärdatei geschrieben.

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1535215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535215</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Tue, 24 Jun 2008 23:28:22 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Tue, 24 Jun 2008 23:49:29 GMT]]></title><description><![CDATA[<p>const void *addr1 = &amp;x;<br />
streampos size = sizeof(x);</p>
<p>Wozu?</p>
<p>nimm doch lieber ifstream und ofstream...<br />
Da kannste deine Sachen einfach so reinschreiben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535218</guid><dc:creator><![CDATA[Quellcode]]></dc:creator><pubDate>Tue, 24 Jun 2008 23:49:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Wed, 25 Jun 2008 03:50:36 GMT]]></title><description><![CDATA[<p>las mal das &quot;ios:: in&quot; in open weg...</p>
<p>am ende solltest du die datei schliessen und das fstream objekt freigeben &quot;delete&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535223</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 25 Jun 2008 03:50:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Wed, 25 Jun 2008 09:40:29 GMT]]></title><description><![CDATA[<p>Wozu überhaupt das fstream-Objekt dynamisch erzeugen? Das macht hier keinen Sinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535373</guid><dc:creator><![CDATA[Braunstein (off)]]></dc:creator><pubDate>Wed, 25 Jun 2008 09:40:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Wed, 25 Jun 2008 09:49:27 GMT]]></title><description><![CDATA[<p>Ein flush bzw eine delete (was zwingend noch fehlt) wirkt Wunder.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535380</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Wed, 25 Jun 2008 09:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Wed, 25 Jun 2008 10:01:49 GMT]]></title><description><![CDATA[<p>Ahhh danke, hab das fstream Objekt jetzt am Ende freigegeben und jetzt befinden sich auch die geschriebenen Daten nach dem ausführen des Programms in der Datei.</p>
<p>Jetzt steh ich aber noch vor einem zweiten kleinen Problem, wie schließe ich die Datei, wenn ich über einen Zeiger auf den Datenstrom zugreife?<br />
Mit einem normalen fstream Objekt sieht es ja so aus:</p>
<pre><code class="language-cpp">int main () {
  fstream filestr;
  filestr.open (&quot;test.txt&quot;);

  filestr.close();
  return 0;
}
</code></pre>
<p>aber einfach .close() kann ich ja nicht machen, wenn ich einen Zeiger benutze.</p>
<p>Quellcode schrieb:</p>
<blockquote>
<p>Wozu?</p>
<p>nimm doch lieber ifstream und ofstream...<br />
Da kannste deine Sachen einfach so reinschreiben</p>
</blockquote>
<p>Naja ich find meine jetzige Variante besser, weil ich das Ganze eigentlich in Form von Klassen benutze und das praktische ist, dass ich einfach die Addresse einer kompletten Struktur an die read-Funktion übergeben kann und die Funktion dann einfach eine bestimmte Anzahl von Daten in die einzelnen Variablen der Struktur schreibt, ist z.B. praktisch beim lesen/schreiben von Bitmapfileheader/Bitmapinfoheader.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535395</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Wed, 25 Jun 2008 10:01:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Wed, 25 Jun 2008 10:03:19 GMT]]></title><description><![CDATA[<p>hmm, du könntest aber</p>
<pre><code class="language-cpp">filestr-&gt;close();
</code></pre>
<p>verwenden ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535397</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Wed, 25 Jun 2008 10:03:19 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Wed, 25 Jun 2008 10:08:43 GMT]]></title><description><![CDATA[<p>mhhh eigentlich hab ich das schon vorhin ausprobiert, war wahrscheinlich ein Tippfehler drin, den ich nicht gesehn hab.</p>
<p>Funktioniert jetzt alles wunderbar, danke nochmal für die Hilfe <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/1535400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535400</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Wed, 25 Jun 2008 10:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Wed, 25 Jun 2008 10:11:12 GMT]]></title><description><![CDATA[<p>Nochmal die Frage. Wozu hier überhaupt ein Zeiger?<br />
Wenn du Zeiger nutzt, reicht am Schluß auch ein</p>
<pre><code class="language-cpp">delete filestr;
</code></pre>
<p>Das close() wird dann vom Destruktor automatisch aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535403</guid><dc:creator><![CDATA[Braunstein (off)]]></dc:creator><pubDate>Wed, 25 Jun 2008 10:11:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Wed, 25 Jun 2008 10:18:21 GMT]]></title><description><![CDATA[<p>Naja dynamisch benutz ich es eigentlich in einem anderen Projekt, bei dem es darum geht Bitmaps zu analysieren, bzw zu verändern. Dabei trat halt das Problem auf, dass das mit dem Schreiben nicht klappte, tja jetzt weiß ich ja wiso <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="😃"
    /><br />
Und weil ich den Fehler finden wollte, hab ich halt einen extra Code nur mit der Schreibfunktion geschrieben, um halt das Problem auf einem Blick zu haben und hier nicht lauter Code-Schnipsel rein stellen zu müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535411</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Wed, 25 Jun 2008 10:18:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Wed, 25 Jun 2008 10:19:00 GMT]]></title><description><![CDATA[<p>Nebukat schrieb:</p>
<blockquote>
<p>Naja ich find meine jetzige Variante besser, weil ich das Ganze eigentlich in Form von Klassen benutze und das praktische ist, dass ich einfach die Addresse einer kompletten Struktur an die read-Funktion übergeben kann und die Funktion dann einfach eine bestimmte Anzahl von Daten in die einzelnen Variablen der Struktur schreibt, ist z.B. praktisch beim lesen/schreiben von Bitmapfileheader/Bitmapinfoheader.</p>
</blockquote>
<p>Vielleicht verstehe ich dich falsch, aber wo wiederspricht das der Verwendung der Streams? Der übliche Weg wäre das man jeweils einen Operator für Eingabe- und Ausgabestreams für die verschiedenen Datentypen anlegt.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535413</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 25 Jun 2008 10:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Wed, 25 Jun 2008 10:30:53 GMT]]></title><description><![CDATA[<p>Nebukat schrieb:</p>
<blockquote>
<p>Naja dynamisch benutz ich es eigentlich in einem anderen Projekt,</p>
</blockquote>
<p>Die Frage steht immer noch. Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535424</guid><dc:creator><![CDATA[Braunstein (off)]]></dc:creator><pubDate>Wed, 25 Jun 2008 10:30:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Thu, 26 Jun 2008 14:58:19 GMT]]></title><description><![CDATA[<p>Also wenn ich mal drüber nachdenke gibt es eigentlich keinen zwingenden Grund das fstream-Objekt dynamisch zu erzeugen. Allerdings bin ich gerade dabei mich nach eineinhalbjähriger C++ Abstinenz wieder reinzuarbeiten und beschäftige mich auch zum ersten Mal mit dem Umgang von Dateien.</p>
<p>Ich habs jetzt umgeschrieben, den Zeigerzugriff und die dynamische Erzeugung des fstream-Objekts hab ich entfernt. Sieht jetzt gekürzt so aus:</p>
<pre><code class="language-cpp">int main()
{
    BITMAPFILEHEADER BitmapFileheader;
    BITMAPINFOHEADER BitmapInfoheader;

    ifstream m_file;
    m_file.open(&quot;Unbenannt.bmp&quot;, ios:: in | ios:: binary);
    if( !inputStream )
    {
        cerr &lt;&lt; &quot;Fehler beim oeffnen&quot; &lt;&lt; endl;
        return 1;
    }

//  Lesen der FileHeader Informationen   
    m_file.read(reinterpret_cast&lt;char*&gt;(&amp;BitmapFileheader), sizeof(BITMAPFILEHEADER));

...

    m_file.close();
    system(&quot;pause&quot;);
    return 0;
}
</code></pre>
<p>Außerdem will ich von diesem reinterpret_cast&lt;char*&gt; weg, nur dabei stoße ich wieder auf ein Problem <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 />
Mit der read(char* s, streamsize n) Funktion kann man einen Datenblock auslesen, so nun will ich Byte für Byte auslesen, dann muss doch n gleich eins sein und s muss doch dann nur auf einen einfachen char zeigen und wenn der ausgelesene Inhalt dann in einer integer Variablen gespeichert werden soll, brauch ich doch nur schreiben &quot;x = int(*buffer);&quot;; nur irgendwie funktioniert es nicht so, hier noch mal der Code dazu:</p>
<pre><code class="language-cpp">int x = 0;
    char* buffer = new char;

    for(int i=0; i&lt;10; i++)
    {
        m_file.read(buffer, 1);

        x = int(*buffer);
        cout&lt;&lt;&quot;Inhalt von buffer: &quot;&lt;&lt; x&lt;&lt; endl;

    }   
    delete[] buffer;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1536444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536444</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Thu, 26 Jun 2008 14:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Thu, 26 Jun 2008 15:52:18 GMT]]></title><description><![CDATA[<p>Wenn du nur ein char lesen willst, nimm lieber get.</p>
<pre><code class="language-cpp">int x = 0;
    char ch;

    for(int i=0; i&lt;10; i++)
    {
        m_file.get(ch);

        x = int(ch);
        cout&lt;&lt;&quot;Inhalt von buffer: &quot;&lt;&lt; x&lt;&lt; endl;

    }
</code></pre>
<p>Das byteweise Einlesen ist aber viel langsamer als das Einlesen ganzer Blöcke mit read oder readsome.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536489</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 26 Jun 2008 15:52:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Thu, 26 Jun 2008 21:31:57 GMT]]></title><description><![CDATA[<p>Nebukat schrieb:</p>
<blockquote>
<p>Außerdem will ich von diesem reinterpret_cast&lt;char*&gt; weg, nur dabei stoße ich wieder auf ein Problem <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="🙄"
    /></p>
</blockquote>
<p>dann wäre es eine Möglichkeit sich seinen eigenen Binärstream zu basteln. Das geht mittels Ableiten von std::basic_ios&lt;&gt;. Etwa</p>
<pre><code class="language-cpp">class ibinstream : public std::basic_ios&lt; char &gt;
{
public:
    typedef std::basic_ios&lt; char &gt; base_type;
    explicit ibinstream( std::streambuf* sb = 0 )
        : base_type( sb )
    {}

    ibinstream&amp; operator&gt;&gt;( WORD&amp; x_ )
    {
        if( good() )
        {
            WORD x;
            if( rdbuf()-&gt;sgetn( reinterpret_cast&lt; char* &gt;( &amp;x ), sizeof(WORD) ) == sizeof(WORD) )
                x_ = x;
            else
                setstate( std::ios_base::failbit | std::ios_base::eofbit );
        }
        return *this;
    }
    ibinstream&amp; operator&gt;&gt;( DWORD&amp; x_ )
    {
        if( good() )
        {
            DWORD x;
            if( rdbuf()-&gt;sgetn( reinterpret_cast&lt; char* &gt;( &amp;x ), sizeof(DWORD) ) == sizeof(DWORD) )
                x_ = x;
            else
                setstate( std::ios_base::failbit | std::ios_base::eofbit );
        }
        return *this;
    }
};
</code></pre>
<p>Das wäre die Minimalausstattung zum Lesen von WORD und DWORD.</p>
<p>Auf der Basis baue man sich eine Funktion, die z.B. die BITMAPFILEHEADER-Struktur liest.</p>
<pre><code class="language-cpp">// --   BITMAPFILEHEADER
ibinstream&amp; operator&gt;&gt;( ibinstream&amp; in, BITMAPFILEHEADER&amp; hdr )
{
    const WORD bmp_type = 0x4D42;   // 0x4D42 in memory: 0x42 0x4D means &quot;BM&quot;
    if( in &gt;&gt; hdr.bfType )
    {
        if( hdr.bfType != bmp_type )    
            in.setstate( std::ios_base::failbit );
        else
        {
            in &gt;&gt; hdr.bfSize &gt;&gt; hdr.bfReserved1 &gt;&gt; hdr.bfReserved2 &gt;&gt; hdr.bfOffBits;
        }
    }
    return in;
}
</code></pre>
<p>Das Einlesen der einzelnen Member statt der gesamten Struktur garantiert, dass es keine Probleme beim packing gibt.</p>
<p>Die Anwendung ist dann relativ straight forward:</p>
<pre><code class="language-cpp">int main()
{
    using namespace std;
    ifstream file( &quot;Unbenannt.bmp&quot;, ios_base::binary );
    if( !file.is_open() )
    {
        cerr &lt;&lt; &quot;Fehler beim oeffnen&quot; &lt;&lt; endl;
        return 1;
    }
    ibinstream in( file.rdbuf() );  // Binärstream verwenden
    BITMAPFILEHEADER hdr;
    if( in &gt;&gt; hdr )
    {
        cout &lt;&lt; &quot;Header gelesen&quot; &lt;&lt; endl;
    }
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
<p>PS.: benötigte includes</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;windows.h&gt;    // WORD, DWORD, BITMAPFILEHEADER
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1536660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536660</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 26 Jun 2008 21:31:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Thu, 26 Jun 2008 23:41:29 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>erstmal danke für die Antworten, die Idee mit der Erstellung eines eigenen Binärstreams ist ziemlich interessant und ich werd mir in den nächsten Tagen mal das näher zur Gemühte führen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Allerdings hab ich zu erst noch zwei andere Fragen. Zum einen zur get()-Funktion, die hab ich jetzt implementiert, aber bei der Ausgabe steht zehn mal eine -1, aber eigentlich sollte da zehn mal eine 255 stehn. Hier mal der zugehörige Code:</p>
<pre><code class="language-cpp">//  lesen eines Bytes mit get-Funktion
    int x = 0;
    char buffer;

    for(int i=0; i&lt;10; i++)
    {
        m_file.get(buffer);

        x = int(buffer);
        cout&lt;&lt;&quot;Inhalt von buffer: &quot;&lt;&lt; x&lt;&lt; endl;
    }
</code></pre>
<p>Ich hab auch noch mal in einer C++ Referenz nachgeschaut und dort stand die Funktion unter anderem so drin:</p>
<blockquote>
<p>istream&amp; get ( char&amp; c ); - Extracts a character from the stream and stores it in c.</p>
</blockquote>
<p>und eigentlich nutz ich diese ja auch so und ich verstehe nicht warum das Programm nur mist ausgibt.<br />
Andererseits funktioniert das Auslesen wiederum, wenn ich die Funktion als &quot;int get();&quot; nutze. Nur würde ich gern verstehen/wissen wo mein Fehler in der obigen Anwendung liegt, weil sonst mach ich ihn vielleicht an einer anderen Stelle wieder.</p>
<p>Zum anderen hab ich immer noch ein Problem mit der read-Funktion. Ich will nämlich drei Bytes auslesen, ich weiß nur noch nicht ob ich diese mit der get-Funktion einzeln oder in einem Block per read auslesen werde, denke aber eher als Block, weil es schneller geht.<br />
Zum Problem, es passiert bei der Ausgabe genau das Gleiche wie bei der get-Funktion, es wird statt 255 -1 ausgegeben. Außerdem weiß ich nicht wie ich die drei ausgelesenen char Werte auf einmal oder auch einzeln umwandle und in einen int array speichere. Hier mal der Code, bei dem von den drei ausgelesenen Bytes nur der letzte in einer integer Variablen abgelegt wird:</p>
<pre><code class="language-cpp">//  lesen eines Blockes von 3 Bytes mit read-Funktion
    int x;
    char* buffer = new char[3];

    for(int i=0; i&lt;1; i++)
    {
        m_file.read(buffer, 3);  //es werden 3 Werte ausgelesen
        x = int(*buffer);  //wie speichere ich nur einen bestimmten ausgelesenen wert?
        cout&lt;&lt;&quot;Inhalt von buffer: &quot;&lt;&lt; x&lt;&lt; endl;
    }  
    delete[] buffer;
</code></pre>
<p>Oh man hätte nicht gedacht, dass alleine der Ausleseteil so verzwickt wird. Ich muss mich an dieser Stelle schon mal im Voraus für eure Hilfe und beim Lesen dieses langen Beitrags bedanken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536676</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Thu, 26 Jun 2008 23:41:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Fri, 27 Jun 2008 07:34:50 GMT]]></title><description><![CDATA[<p>Nebukat schrieb:</p>
<blockquote>
<p>Allerdings hab ich zu erst noch zwei andere Fragen. Zum einen zur get()-Funktion, die hab ich jetzt implementiert, aber bei der Ausgabe steht zehn mal eine -1, aber eigentlich sollte da zehn mal eine 255 stehn. Hier mal der zugehörige Code:</p>
<pre><code class="language-cpp">//  lesen eines Bytes mit get-Funktion
    int x = 0;
    char buffer;
    
    for(int i=0; i&lt;10; i++)
    {
        m_file.get(buffer);

        x = int(buffer);
        cout&lt;&lt;&quot;Inhalt von buffer: &quot;&lt;&lt; x&lt;&lt; endl;
    }
</code></pre>
</blockquote>
<p>Das ist das Problem mit dem signed unsigned mix. Mache einfach</p>
<pre><code class="language-cpp">x = int(static_cast&lt; unsigned char &gt;( buffer ));
</code></pre>
<p>Dein zweites Problem habe ich nicht verstanden. Das Problem ist doch mit dem obigen cast zu lösen - oder ?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1536746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536746</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 27 Jun 2008 07:34:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Fri, 27 Jun 2008 12:54:05 GMT]]></title><description><![CDATA[<p>Was eine falsche Umwandlung alles für Fehler erzeugen kann, unglaublich. Jetzt werden die richtigen Werte ausgegeben.</p>
<blockquote>
<p>Dein zweites Problem habe ich nicht verstanden. Das Problem ist doch mit dem obigen cast zu lösen - oder ?</p>
</blockquote>
<p>Ja und nein, weil mein zweites Problem bestand aus zwei einzelnen Problemen. Das Problem der falschen Werte ist dank der nun richtigen Typumwandlung behoben. Das zweite Problem war, dass ich nicht wusste wie ich die mit der read-Funktion ausgelesenen drei Werte jeweils in eine Variable speichere, aber mir kam dann doch noch eine Idee und jetzt funktioniert das Auslesen per read-Funktion auch bestens. Die Funktion sieht jetzt so aus:</p>
<pre><code class="language-cpp">//  lesen eines Blockes von 3 Bytes per read-Funktion
    int x;
    char* buffer = new char[3];

    for(int i=0; i&lt;6; i++)
    {
        m_file.read(buffer, 3);  //es werden 3 Werte ausgelesen

        cout&lt;&lt;&quot;Die drei Farbanteile fuer das &quot;&lt;&lt;i+1&lt;&lt;&quot;. Pixel:&quot;&lt;&lt;endl;
        x = int(static_cast&lt; unsigned char &gt;( *buffer ));   // erstes Byte umwandeln
        cout&lt;&lt;&quot;Blau: &quot;&lt;&lt; x&lt;&lt; endl;
        ++buffer;      //An die zweite Stelle des char array gehn

        x = int(static_cast&lt; unsigned char &gt;( *buffer ));   // zweites Byte umwandeln
        cout&lt;&lt;&quot;Guen: &quot;&lt;&lt; x&lt;&lt; endl;
        ++buffer;     //An die dritte Stelle des char array gehn

        x = int(static_cast&lt; unsigned char &gt;( *buffer ));   // drittes Byte umwandeln
        cout&lt;&lt;&quot;Rot: &quot;&lt;&lt; x&lt;&lt; endl&lt;&lt; endl;
    }  
    delete[] buffer;
</code></pre>
<p>Noch mal danke an alle die mir geholfen haben <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/1536984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1536984</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Fri, 27 Jun 2008 12:54:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Fri, 27 Jun 2008 13:42:59 GMT]]></title><description><![CDATA[<p>oder so</p>
<pre><code class="language-cpp">for(int i=0; i&lt;6; i++)
    {
        m_file.read(buffer, 3);  //es werden 3 Werte ausgelesen

        cout&lt;&lt;&quot;Die drei Farbanteile fuer das &quot;&lt;&lt;i+1&lt;&lt;&quot;. Pixel:&quot;&lt;&lt;endl;
        x = int(static_cast&lt; unsigned char &gt;( buffer[0] ));   // erstes Byte umwandeln
        cout&lt;&lt;&quot;Blau: &quot;&lt;&lt; x&lt;&lt; endl;

        x = int(static_cast&lt; unsigned char &gt;( buffer[1] ));   // zweites Byte umwandeln
        cout&lt;&lt;&quot;Guen: &quot;&lt;&lt; x&lt;&lt; endl;

        x = int(static_cast&lt; unsigned char &gt;( buffer[2] ));   // drittes Byte umwandeln
        cout&lt;&lt;&quot;Rot: &quot;&lt;&lt; x&lt;&lt; endl&lt;&lt; endl;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1537021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1537021</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 27 Jun 2008 13:42:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Mon, 30 Jun 2008 19:01:14 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>beim erweitern des Programms haben sich mal wieder zwei neue Fragen ergeben und zwar weiß ich nicht wie ich bei der write-Funktion alle Elemente eines array/vector auf einmal übergeben kann, gibt es dafür vielleicht spezielle Befehle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<pre><code class="language-cpp">//  Bild erstellen
    char pixel_zeile [600];
    srand((unsigned)time(NULL));

    for(int j=0;j&lt;200;j++)
    {
        for(int i=0;i&lt;600;i++)
        {
            pixel_zeile [i] = char(static_cast&lt; unsigned char &gt;( rand()%256 ));
        }
        crypt_file.write(  , 600);  //Wie übergibt man alle Elemente eines arrays auf einmal???
    }
</code></pre>
<pre><code class="language-cpp">//  Bild erstellen
    vector&lt;char&gt; pixel_zeile;
    srand((unsigned) time(NULL));

    for(int j=0;j&lt;200;j++)
    {
        for(int i=0;i&lt;600;i++)
        {
            pixel_zeile.push_back(char(static_cast&lt; unsigned char &gt;( rand()%256 )));
        }
         crypt_file.write(  , 600);  //Wie übergibt man alle Elemente eines vectors auf einmal???
         crypt_file.clear();
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1538777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538777</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Mon, 30 Jun 2008 19:01:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Schreiben in Binärdatei on Mon, 30 Jun 2008 19:06:22 GMT]]></title><description><![CDATA[<p>Ah mir is doch noch eine Möglichkeit eingefallen.</p>
<pre><code class="language-cpp">char* buffer = new char[600];
    srand((unsigned)time(NULL));

    for(int j=0;j&lt;200;j++)
    {
        for(int i=0;i&lt;600;i++)
        {
            buffer [i] = char(static_cast&lt; unsigned char &gt;( rand()%256 ));
        }
        crypt_file.write(buffer, 600);
    }
    delete[] buffer;
</code></pre>
<p>Würde mich aber über weiter Vorschläge freuen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538780</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Mon, 30 Jun 2008 19:06:22 GMT</pubDate></item></channel></rss>