Daten vom Typ unsigned char in eine Datei schreiben



  • Hallo!

    Ich möchte Daten vom Typ unsigned char (also byte ) in eine Datei schreiben. Wenn ich dafür std::ofstream benutze, kann ich leider nur einen char-Pointer angeben.
    Kann ich das Problem mithilfe eines einfachen Typecasts wie folgt umgehen?

    ofstream os ("test.dat", fstream::out | fstream::binary);
    unsigned char * c = new unsigned char[2];
    c[0] = ...
    os.write((char*)c, 2* sizeof(unsigned char));
    

    Oder gibt es bei dieser Vorgehensweise Probleme, die ich nicht sehe?
    Es gibt ja auch die Möglichkeit, sich mittels fopen einen Zugriff auf eine Datei zu schaffen. fread akzeptiert auch einen Pointer beliebigen Typs, warum ist das bei ofstream nicht so? Gibt es Vorteile bei fopen und fread ? Sind das etwa noch alte C-Funktionen?

    Danke im Voraus!
    Andy



  • sunnyandy schrieb:

    Kann ich das Problem mithilfe eines einfachen Typecasts wie folgt umgehen?

    kannst du. wenn du einen pointer castest, ändern sich die daten, auf die er zeigt, nicht.

    sunnyandy schrieb:

    warum ist das bei ofstream nicht so?

    keine ahnung. man darf sich nicht all zu viel bei der c++ standard api erwarten. viele sachen wurden nicht restlos durchdacht. vielleicht verbessert sich das mit c++0x.

    sunnyandy schrieb:

    Gibt es Vorteile bei fopen und fread? Sind das etwa noch alte C-Funktionen?

    es gibt keine vorteile. die funktionen sind zwar teil der stdio api, die man meistens nur mit c verwendet, alt sind die funktionen aber nicht und man kann sie auch problemlos mit c++ verwenden, wenn man das will.



  • sunnyandy schrieb:

    Ich möchte Daten vom Typ unsigned char (also byte ) in eine Datei schreiben. Wenn ich dafür std::ofstream benutze, kann ich leider nur einen char-Pointer angeben.

    Die write-Methode erwartet einen Zeiger auf die Daten und die Länge der Daten. Du hast Daten, warum kannst Du write dann keinen Zeiger darauf übergeben?

    char c = 'x';
    ofstream os ("test.dat", fstream::out | fstream::binary);
    os.write( &c, sizeof c );
    


  • Die write-Methode erwartet einen Zeiger auf die Daten und die Länge der Daten. Du hast Daten, warum kannst Du write dann keinen Zeiger darauf übergeben?

    os.write( &c, sizeof c );
    

    Ich dachte, das bedeutet, dass er dort die Größe für einen Pointer einsetzt, also immer 4 Byte...



  • Der Pointer ist &c (vom Typ char*). c ist vom Typ char, und char ist 1 Byte groß. sizeof &c wäre also 4.


Anmelden zum Antworten