Verlorene Daten bei einlesen von BitMaps



  • Hallo,
    auch wenn es schon tausende Fragen zu diesem Thema gibt und ich mir auch alles was ich zu dem Thema bei google gefunden hab durchgelesen hab versteh ich das Problem noch nicht.

    Ich habe versucht ein Bitmap Hexadezimal einzulesen und wieder auszugeben.
    Nur wenn ich mir das Ergebniss dann angucke mit einem Hex Editor und die eigentliche Datei fehlen Zahlen 😕
    Hier ein Programm Beispiel was die ersten 256 Zeichen einliest und wieder ausgiebt.

    #include<fstream>
    #include<iomanip.h>
    
    using namespace std;
    
    int main(){
        //Datei öffnen und einstellen
        fstream filein;
        filein.open("NeuBitmap.bmp",ios::in |ios::binary );
        filein.setf(ios::hex, ios::basefield);
    
        //Daten aus Datei einlesen
        char buffer[256];
        filein>>buffer;
    
        //Datei zur Ausgab öffnen und einstelen 
        fstream fileout;
        fileout.open( "test.btm",ios::out | ios::binary);
        fileout.setf(ios::hex, ios::basefield);
    
        // In Datei schreiben 
          for(int a =0;a<256;a++){fileout<<buffer[a];}
    
        //Dateien schließen
        filein.close();
        fileout.close();
        return 0;
    }
    

    Hier derst die Original Zeilen aus dem Hexeditor :

    424D760B000000000000360000002800000027000000180000000100180000000000400B000000000000000000000000.....
    

    Und dann die Ausgabe:

    424D760011F0C1B840063E0040063E0000E0030043003A0078013E006F006B0075006D0078013E000000000020007500.....
    

    Liegt dass an den Flaschen Flags oder kann man dass überhaupt so machen?
    Kann man eiegntlich auch direkt die einzelnen Bits auslesen? Hab mal was von Boolalpha gehört aber keine konkrete Anwendung.
    Hoffe irgtjemand kann mir eklären warum man das nicht so machen kann und wie es richtig geht.



  • statt

    filein>>buffer;
    

    musst du

    filein.read(buffer, sizeof(buffer));
    

    schreiben



  • Stimmt!!!
    Aber warum ist das jetzt anderst als des davor ?
    Und des heißt des ist jetz wirklich so gespeichert dass ich in Buffer[0] Buffer[1]... Zahlen von 1-F hab ?
    Und warum kann ich eigentlich dass dann net so :

    cout.setf(ios::hex, ios::basefield);
        cout<<buffer;
    

    ausgeben wie ich des dann auch mit einem Hex Editor sehen kann ?



  • der operator>> liest nur bis zum nächsten whitespace



  • Ohh! Jetzt wird mir einiges klar. ^^


Anmelden zum Antworten