Hallo,
ich versuche über folgende Methode in Java Long-Werte in eine Datei zu schreiben:
Auslesen in Java (testweise) klappt auch.
Wenn ich nun aber versuche in C++ mit folgendem Code versuche die Werte auszulesen
ergeben sich andere Werte als die, die ich eingespeichert habe.
In diesem Fall wird mir ausgegeben:
Speichere ich die Werte mit C++ (hiermit)
und lese sie danach wieder mit der Funktion darüber aus werden mir die korrekten Werte
ausgegeben.
Folglich ziehe ich den Schluss, dass Java und C++ die Binärdaten unterschiedlich speichern.
Des Weiteren fiel mir auf, dass Werte wie "-1" wiederum in C++ korrekt ausgelesen werden.
Wie könnte ich die Java-Werte richtig in C++ auslesen?
ich versuche über folgende Methode in Java Long-Werte in eine Datei zu schreiben:
Java:
public void save_longs(){
try {
JFileChooser saveDialog=new JFileChooser();
saveDialog.showSaveDialog(window);
FileOutputStream file=new FileOutputStream(saveDialog.getSelectedFile());
DataOutputStream dos = new DataOutputStream(file);
long test = 1;
long test2 = 2;
long test3 = 3;
long test4 = 4;
dos.writeLong(test);
dos.writeLong(test2);
dos.writeLong(test3);
dos.writeLong(test4);
dos.close();
}catch (IOException e) {
e.printStackTrace();
}
}
Auslesen in Java (testweise) klappt auch.
Java:
public void load_longs(){
try {
JFileChooser saveDialog=new JFileChooser();
saveDialog.showOpenDialog(window);
FileInputStream file=new FileInputStream(saveDialog.getSelectedFile());
DataInputStream dos = new DataInputStream(file);
long test = dos.readLong();
long test2 = dos.readLong();
long test3 = dos.readLong();
long test4 = dos.readLong();
System.out.println(test);
System.out.println(test2);
System.out.println(test3);
System.out.println(test4);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Wenn ich nun aber versuche in C++ mit folgendem Code versuche die Werte auszulesen
ergeben sich andere Werte als die, die ich eingespeichert habe.
Code:
std::ifstream mapfile("test.map", std::ios::binary);
long test = 0;
long test2 = 0;
long test3 = 0;
long test4 = 0;
mapfile.read(reinterpret_cast < char * > (&test), sizeof(long));
mapfile.read(reinterpret_cast < char * > (&test2), sizeof(long));
mapfile.read(reinterpret_cast < char * > (&test3), sizeof(long));
mapfile.read(reinterpret_cast < char * > (&test4), sizeof(long));
cout << "VALUE: " << test << endl;
cout << "VALUE2: " << test2 << endl;
cout << "VALUE3: " << test3 << endl;
cout << "VALUE4: " << test4 << endl;
In diesem Fall wird mir ausgegeben:
Code:
VALUE: 0
VALUE2: 16777216
VALUE3: 0
VALUE4: 33554432
Speichere ich die Werte mit C++ (hiermit)
Code:
std::ofstream mapfile("test.map", std::ios::binary);
long test = 1;
long test2 = 2;
long test3 = 3;
long test4 = 4;
mapfile.write(reinterpret_cast < char * > (&test), sizeof(long));
mapfile.write(reinterpret_cast < char * > (&test2), sizeof(long));
mapfile.write(reinterpret_cast < char * > (&test3), sizeof(long));
mapfile.write(reinterpret_cast < char * > (&test4), sizeof(long));
mapfile.close();
und lese sie danach wieder mit der Funktion darüber aus werden mir die korrekten Werte
ausgegeben.
Folglich ziehe ich den Schluss, dass Java und C++ die Binärdaten unterschiedlich speichern.
Des Weiteren fiel mir auf, dass Werte wie "-1" wiederum in C++ korrekt ausgelesen werden.
Wie könnte ich die Java-Werte richtig in C++ auslesen?
Zuletzt bearbeitet: