Probleme beim schreiben in BMP-Datei
-
Moin,
ich hab ein Programm geschrieben, mit dem eine Nachricht in einem Bild versteckt wird. Dafür gibt es eine Funktion "Nachricht_Verschl" mit der die vom Benutzer eingegebene Nachricht in die BMP-Datei geschrieben wird und eine Funktion "Nachricht_Entschl", die die Nachricht wieder aus der BMP-Datei liest.
Zum Problem:
Mein Problem ist jetzt nach dem ich alle Kontrollausgaben entfernt habe funktioniert die "Nachricht_Verschl" Funktion nicht mehr (Streamzeiger wird -1). Jetzt hab ich die einzelnen Kontrollausgaben einzeln wieder hinzugefügt und festgestellt, dass wenn die Ausgabe "Zeiger Position nach schreiben: "<< crypt_bmp.tellg()" im Code steht, das Programm halbwegs stabil läuft, aber wieso geht es nicht ohne

Und noch komischer ist, die Lese Funktion funktioniert, obwohl ich dafür einfach nur die "Nachricht_Verschl" Funktion kopiert hab und aus den write Funktionen read Funktionen gemacht habe.
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.Sprich irgendetwas läuft da im Code voll gegen den Baum

Wäre für jede Hilfe/Idee sehr dankbar

Hier der Code, sorry geht leider nicht kürzer:
int Nachricht_Verschl (char nachricht[500]) { fstream crypt_bmp; crypt_bmp.open("GEHEIM.bmp", fstream:: in | fstream:: out | fstream:: binary); if( !crypt_bmp ) { cerr << "Fehler beim oeffnen" << 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<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(&nachricht [0], 1); //Zeichen in BMP-Datei schreiben cout<<"Zeiger Position nach schreiben: "<< crypt_bmp.tellg()<<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(&nachricht [i], 1); cout<<"Zeiger Position nach schreiben: "<< crypt_bmp.tellg()<<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(&nachricht [i], 1); cout<<"Zeiger Position nach schreiben: "<< crypt_bmp.tellg()<<endl; } } crypt_bmp.close(); return 0;}
-
Mach ein kleines Beispiel und dann gehe mit dem Debugger Schritt für Schritt durch.