ueberladen von ofstream



  • Hi,

    ich habe folgendes Problem.

    Habe mir selbst einen Bitmapheader geschrieben.
    (ICh weiss es gibt schon einen)

    Jetzt wollte ich die Struktur mit einem Outstream an eine Datei uebergeben.

    Leider hat der outstream meine Daten in Zeichenketten umgewandelt.

    Sprich int wert 360000 belegt nicht 4 Byte sondern 6 ( 3 , 6, 0 ,0 ,0 ,0)
    Hab das jetzt folgendermassen umgangen

    std::ostream &operator<<(std::ostream &ostr, const PILLE_BITMAPHEADER &PiBi)
    {
    	ostr << ((char*)&PiBi.mType)[0];
    	ostr << ((char*)&PiBi.mType)[1];
    	ostr << ((char*)&PiBi.mFilesize)[0];
    	ostr << ((char*)&PiBi.mFilesize)[1];
    	ostr << ((char*)&PiBi.mFilesize)[2];
    	ostr << ((char*)&PiBi.mFilesize)[3];
    	ostr << ((char*)&PiBi.mReserved1)[0];
    	ostr << ((char*)&PiBi.mReserved1)[1];
    	ostr << ((char*)&PiBi.mReserved2)[0];
    	ostr << ((char*)&PiBi.mReserved2)[1];
    	ostr << ((char*)&PiBi.mOffset)[0];
    	ostr << ((char*)&PiBi.mOffset)[1];
    	ostr << ((char*)&PiBi.mOffset)[2];
    	ostr << ((char*)&PiBi.mOffset)[3];
    
    	return( ostr);
    }
    

    Das fuehlt sich aber irgendwie "unsauber an", auch wenns klappt.

    Hat irgendjemand Verbesserungsvorschlaege?

    Und ein weiteres Problem 🙄

    Selber Header( standardkonform natuerlich)
    hat die Wertgroessen

    short
    int
    short
    short
    int

    macht als summe 14 byte

    Weil aber auf das short gleich ein int kommt laesst der
    Rechner/Compiler/heinzelmaennchen da 2 byte frei weil er intern ja mit
    4 byte schritten arbeitet.

    Wie kann ich die groesse vom rechner bestimmen lassen?
    Gebe momentan 14 manuell vor weil sizeof nicht funzt aber da gibts doch bestimmt alternativen oder?
    ( sowas wie explicit size oder so)

    Danke im voraus
    PIlger81



  • mit write kannst du binäre werte in den Stream schreiben.
    Und mit read sie wieder auslesen.



  • Das ist so einfach, ich geh mal schnell in die ecke und schaem mich 😞

    Danke erstmal fuer die schnelle Antwort.
    (low level IO in C is einfacher aber ich will mir son bissl C++ angewoehnen 🙂


Anmelden zum Antworten