Warum das Lesen und Schreiben einer Binärdatei nicht funktioniert, wie ich erwarten?

stimmen
-1

Ich versuche , einen doppelten Wert zu ersetzen , die auf dem 32th Byte in der Binärdatei ist. Im folgenden Setup von der Größe MyStructist 24 Byte. Daher soll das 32th Byte in der Datei das sein WeightMembervariable der zweiten Struktur. Gerade jetzt , wenn ich ausführen, erhalte ich die seltsame Ausgabe. Ich erwarte , dass meine zweite Struktur den neuen Gewichtswert von 250 haben , anstelle von 200:

#include <iostream>
#include <fstream>

using namespace std;

struct MyStruct
{
    int Grade;
    double Weight;
    char Gender;
};

int main()
{
    MyStruct* lStruct = new MyStruct{ 1, 100, 'M' };
    MyStruct* lStruct2 = new MyStruct{ 2, 200, 'F' };;

    fstream InFile;
    InFile.open(test.txt, ios::in | ios::out | ios::binary);
    InFile.write(reinterpret_cast<char*>(lStruct), sizeof(MyStruct));
    InFile.write(reinterpret_cast<char*>(lStruct2), sizeof(MyStruct));


    InFile.seekp(32, ios::beg);
    double Weight = 250;
    InFile.write(reinterpret_cast<char*>(&Weight), sizeof(double));

    InFile.seekg(0, ios::beg);
    InFile.read(reinterpret_cast<char*>(lStruct), sizeof(MyStruct));
    InFile.seekg(24, ios::beg);
    InFile.read(reinterpret_cast<char*>(lStruct2), sizeof(double));

    cout << lStruct->Grade<< endl;
    cout << lStruct->Weight << endl;
    cout << lStruct->Gender<< endl;
    cout << endl;

    cout << lStruct2->Grade<< endl;
    cout << lStruct2->Weight << endl;
    cout << lStruct2->Gender<< endl;
    cout << endl;

    return 0;
}

Ausgabe:

1

100

M

2

200

F

Worin besteht das Problem?

Bonus Frage: ist seekp(32, ios::beg)äquivalent zu seekp(-16, ios::end)? (kann ich negativ away-from - Ende)?

Veröffentlicht am 09/10/2019 um 19:01
quelle vom benutzer
In anderen Sprachen...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more