Datenverlust....
-
Hallo,
da bin ich schon wieder!
Ich habe ímmer noch das Problem, dass wenn ich eine Bitmap-Datei auslese und sie hexadezimal im DOS-Fenster ausgebe es immer zu demselben Datenverlust kommt.
Er verliert immer die hälfte der Nullen:
z.B.:
Original: FF AA 00 DD EE 00 00 00 00 BA etc.....
Ausgelesen: FF AA 0 DD EE 00 00 BA ......Warum?
Ich habe schon versucht, die Datei auf verschiedenen Wegen auszulesen und wiederzugeben abe immer wieder der selbe Fehler. Irgendwo mache ich Anfänger
immer denselben Fehler.
Hier mal meine momentane Version des Codes zum Auslesen und wiedergeben:
int c; FILE *bmpFile; long lSize; bmpFile = fopen ( "picture.bmp" , "rb" ); if(bmpFile!=NULL){ fseek (bmpFile , 0 , SEEK_END); lSize = ftell (bmpFile); rewind (bmpFile); for (int i=0; i<lSize; i++) { cout << hex << (fgetc(bmpFile)); } } // end if else printf("Error opening file!\n"); fclose (bmpFile); return 0;
Vielen Dank schon einmal
-
Naja, 00 == 0 und genau das gibt cout aus, wenn du nicht mit führenden Nullen auffüllst.
Probier mal das:cout << setw(2) << setfill('0') << hex << (fgetc(bmpFile));
Dazu mußt du noch <iomanip> inkludieren.
-
@Cocaine Es klappt super aber es kann doch nicht sein, dass man einfach Nullen hinzuaddiert, um ein richtiges Ergebnis zu erhalten. Ich hatte es schon mit cout, printf usw. ausprobiert und überall war es dasselbe. Wenn ich eine Datei auslese, möchte ich auch den kompletten KORREKTEN Inhalt davon haben und nicht später etwas hinzuaddieren müssen, damit er KORREKT ist! Ist dieses Problem nur bei Nullen? Was ist wenn es mit anderen Zahlen auftritt, dann kann man das Auslesen eigentlich komplett vergessen.
Andere Frage: Wie kann ich den Inhalt des Bitmaps in eine Variable speichern, damit ich damit arbeiten kann....um vielleicht später einen Teilwert, Teilstring rauszulesen.
-
Scorn schrieb:
@Cocaine Es klappt super aber es kann doch nicht sein, dass man einfach Nullen hinzuaddiert, um ein richtiges Ergebnis zu erhalten. Ich hatte es schon mit cout, printf usw. ausprobiert und überall war es dasselbe. Wenn ich eine Datei auslese, möchte ich auch den kompletten KORREKTEN Inhalt davon haben und nicht später etwas hinzuaddieren müssen, damit er KORREKT ist!
Was ist denn an der vorherigen Ausgabe nicht korrekt? Woher soll cout denn wissen, ob du führende Nullen haben willst oder nicht? Vom Ergebnis her ist 0 dasselbe wie 00, 000 etc. Genauso wie standardmäßig 1.20 als 1.2 ausgegeben wird.
Scorn schrieb:
Ist dieses Problem nur bei Nullen? Was ist wenn es mit anderen Zahlen auftritt, dann kann man das Auslesen eigentlich komplett vergessen.
Nicht nur bei Nullen, sondern bei allen einstelligen Zahlen fehlt die von dir gewünschte führende Null (ist doch auch logisch, oder?).
Bei printf mußt du das übrigens auch extra angeben:
printf("%02x", zahl);
-
Also da haste recht, logisch ist es. Nur muss ich mir dann halt eine andere Möglichkeit zur Verarbeitung suchen und den Inhalt in eine Variable einlesen um damit zu arbeiten.
Danke Dir nochmal. Gruss
Scorn