<?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[Probleme beim schreiben in BMP-Datei]]></title><description><![CDATA[<p>Moin,</p>
<p>ich hab ein Programm geschrieben, mit dem eine Nachricht in einem Bild versteckt wird. Dafür gibt es eine Funktion &quot;Nachricht_Verschl&quot; mit der die vom Benutzer eingegebene Nachricht in die BMP-Datei geschrieben wird und eine Funktion &quot;Nachricht_Entschl&quot;, die die Nachricht wieder aus der BMP-Datei liest.</p>
<p><strong>Zum Problem:</strong></p>
<p>Mein Problem ist jetzt nach dem ich alle Kontrollausgaben entfernt habe funktioniert die &quot;Nachricht_Verschl&quot; Funktion nicht mehr (Streamzeiger wird -1). Jetzt hab ich die einzelnen Kontrollausgaben einzeln wieder hinzugefügt und festgestellt, dass wenn die Ausgabe &quot;Zeiger Position nach schreiben: &quot;&lt;&lt; crypt_bmp.tellg()&quot; im Code steht, das Programm halbwegs stabil läuft, aber wieso geht es nicht ohne <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="😕"
    /><br />
Und noch komischer ist, die Lese Funktion funktioniert, obwohl ich dafür einfach nur die &quot;Nachricht_Verschl&quot; Funktion kopiert hab und aus den write Funktionen read Funktionen gemacht habe.<br />
Ein weiteres Problem in diesem Zusammenhang ist, trotz Kontrollausgabe werden die Nachrichten nicht immer vollständig in die Datei geschrieben, weil plötzlich wieder der Zeiger auf die Datei den Wert -1 erhält.</p>
<p>Sprich irgendetwas läuft da im Code voll gegen den Baum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Wäre für jede Hilfe/Idee sehr dankbar <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>Hier der Code, sorry geht leider nicht kürzer:</p>
<pre><code class="language-cpp">int Nachricht_Verschl (char nachricht[500])
{
    fstream crypt_bmp;
    crypt_bmp.open(&quot;GEHEIM.bmp&quot;, fstream:: in | fstream:: out | fstream:: binary);
    if( !crypt_bmp )
    {
        cerr &lt;&lt; &quot;Fehler beim oeffnen&quot; &lt;&lt; endl;
        return 1;
    }

    int zahl1, zahl2, position_zeichen, position_aktuell;
    zahl1 = 0;
    zahl2 = 0;
    position_zeichen = 0;
    position_aktuell = 0;
    crypt_bmp.seekg(54);     //Zeiger an Ende von BMP-Header setzen

    for(int i=0;i&lt;strlen(nachricht);i++)
    {
        //Position für ersten Buchstaben ermitteln
        if(i == 0)
        {
            zahl1 = crypt_bmp.get();     //Berechnung wie viel Stellen weiter
            zahl2 = crypt_bmp.get();     //ein Buchstabe gespeichert werden soll
            position_zeichen = zahl1*zahl2%197;
            position_zeichen = position_zeichen%78;

            if(position_zeichen == 0){crypt_bmp.get();}     //3.Byte soll immer frei bleiben, daher wird ein Byte übersprungen
                else{crypt_bmp.seekg(57+position_zeichen);} //Zeiger springt an die Prositions, wo ein Buchstabe eingesetzt wird

            crypt_bmp.write(&amp;nachricht [0], 1);    //Zeichen in BMP-Datei schreiben
            cout&lt;&lt;&quot;Zeiger Position nach schreiben: &quot;&lt;&lt; crypt_bmp.tellg()&lt;&lt;endl;
        }

        //Position für ein Buchstaben ermitteln
        if(i%2 == 1)
        {
            zahl1 = crypt_bmp.get();     //Berechnung wie viel Stellen weiter
            zahl2 = crypt_bmp.get();     //ein Buchstabe gespeichert werden soll
            position_zeichen = zahl1*zahl2%197;
            position_zeichen = position_zeichen%78;
            position_aktuell = crypt_bmp.tellg();

            if(position_zeichen == 0){crypt_bmp.get();}                     //3.Byte soll immer frei bleiben, daher wird ein Byte übersprungen
                else{crypt_bmp.seekg(position_aktuell+1+position_zeichen);} //Zeiger springt an die Prositions, wo ein Buchstabe eingesetzt wird

            //Zeichen in BMP-Datei schreiben
            crypt_bmp.write(&amp;nachricht [i], 1);
            cout&lt;&lt;&quot;Zeiger Position nach schreiben: &quot;&lt;&lt; crypt_bmp.tellg()&lt;&lt;endl;
        }

        //Position für ein Buchstaben ermitteln
        else if(i != 0)
        {
            zahl1 = crypt_bmp.get();     //Berechnung wie viel Stellen weiter
            zahl2 = crypt_bmp.get();     //ein Buchstabe gespeichert werden soll
            position_zeichen = zahl1*zahl2%197;
            position_zeichen = position_zeichen%78;
            position_aktuell = crypt_bmp.tellg();

            if(position_zeichen == 0){crypt_bmp.get();}                     //3.Byte soll immer frei bleiben, daher wird ein Byte übersprungen
                else{crypt_bmp.seekg(position_aktuell+1+position_zeichen);} //Zeiger springt an die Prositions, wo ein Buchstabe eingesetzt wird

            //Zeichen in BMP-Datei schreiben
            crypt_bmp.write(&amp;nachricht [i], 1);
            cout&lt;&lt;&quot;Zeiger Position nach schreiben: &quot;&lt;&lt; crypt_bmp.tellg()&lt;&lt;endl;
        }
     }
    crypt_bmp.close();
    return 0;}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/218519/probleme-beim-schreiben-in-bmp-datei</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 02:26:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218519.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Jul 2008 19:30:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme beim schreiben in BMP-Datei on Mon, 21 Jul 2008 19:30:36 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>ich hab ein Programm geschrieben, mit dem eine Nachricht in einem Bild versteckt wird. Dafür gibt es eine Funktion &quot;Nachricht_Verschl&quot; mit der die vom Benutzer eingegebene Nachricht in die BMP-Datei geschrieben wird und eine Funktion &quot;Nachricht_Entschl&quot;, die die Nachricht wieder aus der BMP-Datei liest.</p>
<p><strong>Zum Problem:</strong></p>
<p>Mein Problem ist jetzt nach dem ich alle Kontrollausgaben entfernt habe funktioniert die &quot;Nachricht_Verschl&quot; Funktion nicht mehr (Streamzeiger wird -1). Jetzt hab ich die einzelnen Kontrollausgaben einzeln wieder hinzugefügt und festgestellt, dass wenn die Ausgabe &quot;Zeiger Position nach schreiben: &quot;&lt;&lt; crypt_bmp.tellg()&quot; im Code steht, das Programm halbwegs stabil läuft, aber wieso geht es nicht ohne <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="😕"
    /><br />
Und noch komischer ist, die Lese Funktion funktioniert, obwohl ich dafür einfach nur die &quot;Nachricht_Verschl&quot; Funktion kopiert hab und aus den write Funktionen read Funktionen gemacht habe.<br />
Ein weiteres Problem in diesem Zusammenhang ist, trotz Kontrollausgabe werden die Nachrichten nicht immer vollständig in die Datei geschrieben, weil plötzlich wieder der Zeiger auf die Datei den Wert -1 erhält.</p>
<p>Sprich irgendetwas läuft da im Code voll gegen den Baum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Wäre für jede Hilfe/Idee sehr dankbar <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>Hier der Code, sorry geht leider nicht kürzer:</p>
<pre><code class="language-cpp">int Nachricht_Verschl (char nachricht[500])
{
    fstream crypt_bmp;
    crypt_bmp.open(&quot;GEHEIM.bmp&quot;, fstream:: in | fstream:: out | fstream:: binary);
    if( !crypt_bmp )
    {
        cerr &lt;&lt; &quot;Fehler beim oeffnen&quot; &lt;&lt; endl;
        return 1;
    }

    int zahl1, zahl2, position_zeichen, position_aktuell;
    zahl1 = 0;
    zahl2 = 0;
    position_zeichen = 0;
    position_aktuell = 0;
    crypt_bmp.seekg(54);     //Zeiger an Ende von BMP-Header setzen

    for(int i=0;i&lt;strlen(nachricht);i++)
    {
        //Position für ersten Buchstaben ermitteln
        if(i == 0)
        {
            zahl1 = crypt_bmp.get();     //Berechnung wie viel Stellen weiter
            zahl2 = crypt_bmp.get();     //ein Buchstabe gespeichert werden soll
            position_zeichen = zahl1*zahl2%197;
            position_zeichen = position_zeichen%78;

            if(position_zeichen == 0){crypt_bmp.get();}     //3.Byte soll immer frei bleiben, daher wird ein Byte übersprungen
                else{crypt_bmp.seekg(57+position_zeichen);} //Zeiger springt an die Prositions, wo ein Buchstabe eingesetzt wird

            crypt_bmp.write(&amp;nachricht [0], 1);    //Zeichen in BMP-Datei schreiben
            cout&lt;&lt;&quot;Zeiger Position nach schreiben: &quot;&lt;&lt; crypt_bmp.tellg()&lt;&lt;endl;
        }

        //Position für ein Buchstaben ermitteln
        if(i%2 == 1)
        {
            zahl1 = crypt_bmp.get();     //Berechnung wie viel Stellen weiter
            zahl2 = crypt_bmp.get();     //ein Buchstabe gespeichert werden soll
            position_zeichen = zahl1*zahl2%197;
            position_zeichen = position_zeichen%78;
            position_aktuell = crypt_bmp.tellg();

            if(position_zeichen == 0){crypt_bmp.get();}                     //3.Byte soll immer frei bleiben, daher wird ein Byte übersprungen
                else{crypt_bmp.seekg(position_aktuell+1+position_zeichen);} //Zeiger springt an die Prositions, wo ein Buchstabe eingesetzt wird

            //Zeichen in BMP-Datei schreiben
            crypt_bmp.write(&amp;nachricht [i], 1);
            cout&lt;&lt;&quot;Zeiger Position nach schreiben: &quot;&lt;&lt; crypt_bmp.tellg()&lt;&lt;endl;
        }

        //Position für ein Buchstaben ermitteln
        else if(i != 0)
        {
            zahl1 = crypt_bmp.get();     //Berechnung wie viel Stellen weiter
            zahl2 = crypt_bmp.get();     //ein Buchstabe gespeichert werden soll
            position_zeichen = zahl1*zahl2%197;
            position_zeichen = position_zeichen%78;
            position_aktuell = crypt_bmp.tellg();

            if(position_zeichen == 0){crypt_bmp.get();}                     //3.Byte soll immer frei bleiben, daher wird ein Byte übersprungen
                else{crypt_bmp.seekg(position_aktuell+1+position_zeichen);} //Zeiger springt an die Prositions, wo ein Buchstabe eingesetzt wird

            //Zeichen in BMP-Datei schreiben
            crypt_bmp.write(&amp;nachricht [i], 1);
            cout&lt;&lt;&quot;Zeiger Position nach schreiben: &quot;&lt;&lt; crypt_bmp.tellg()&lt;&lt;endl;
        }
     }
    crypt_bmp.close();
    return 0;}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1551181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551181</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Mon, 21 Jul 2008 19:30:36 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim schreiben in BMP-Datei on Mon, 21 Jul 2008 20:28:06 GMT]]></title><description><![CDATA[<p>Mach ein kleines Beispiel und dann gehe mit dem Debugger Schritt für Schritt durch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551214</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 21 Jul 2008 20:28:06 GMT</pubDate></item></channel></rss>