fstream - Struktur schreiben



  • Ich versuche eine Struktur direkt in eine Datei zu schreiben. Zu einem gewissen Grad funktioniert dies bereits jedoch kommt es noch zu fehlern bei bestimmten Werten:

    #include <fstream>
    #include <iostream>
    using namespace std;
    
    typedef unsigned short WORD; //2 byte
    typedef unsigned long DWORD; //4 byte
    typedef long LONG; //4 byte
    
    #pragma pack(1)//Ausrichtung auf Byte-Grenzen (Padding ausschalten)
    typedef struct tagBITMAPFILEHEADER { 
    	WORD    bfType; 
    	DWORD   bfSize;
    	WORD    bfReserved1; 
    	WORD    bfReserved2; 
    	DWORD   bfOffBits; 
    } BITMAPFILEHEADER, *PBITMAPFILEHEADER; 
    #pragma pack()
    
    int main(int argc, char* argv[]){
    	BITMAPFILEHEADER bmp;
    	bmp.bfSize=0xa5e;
    
    	cout<<bmp.bfSize<<endl; 
    	fstream t("test.bmp", ios::out);
    	t.write((char*)(&bmp.bfSize), sizeof(&bmp.bfSize));
            t.close();
    }
    

    Beim Öffnen der test.bmp Datei mit einem Hexeditor enthält diese ein "5E 0D 0A", was für mich nicht klar ist da es ja eigentlich ein "5E 0A" sein sollte. 😕



  • Öffne die Datei mal im Binär-Modus ios::out|ios::binary , dann sollte das Ergebnis stimmen. (im Textmodus ersetzt der Stream die Zeilenenden \n = 0xA durch die Windows-taugliche Version\r\n = 0xD 0XA)



  • Danke, funktioniert damit.
    Und ich habe bereits zwei Stunden gesucht bis der Fehler soweit eingeschränkt war...


Anmelden zum Antworten