Guten Abend zusammen,
Ich hab ein C++-Programm (MFC), mit dem eine Datei gespeichert wird. Ich habe da eine Liste von Instanzen einer Klasse, die aus Byte-, Short- und Char-Daten besteht. Diese werden mit der Funktion fwrite(...) in eine Datei geschrieben.
Dann hab ich eine Java-Anwendung, die dann die Datei einlesen soll. Dies mache ich über eine eigene Klasse, die von DataInputStream abgeleitet ist. Ich habe für die Short- und Char-Werte die Lesefunktion überschrieben:
C++ speichert die Bytes halt anders rum.
Jetzt haben meine Elemente aus der Liste alle eine ID (vom Typ byte). Solange ich 10 Elemente habe, funktioniert alles super (id < 10). Aber sobald das elfte Element (id = 10) ausgelesen wird, bricht die Funktion mit unterschiedlichen Exceptions ab. Mal eine EOFException, mal eine IOException. Interessant ist dabei, dass es vorher nicht so war. und ich habe jetzt nur eine variable eines Elements mal auf 15 gesetzt (auch vom Typ byte). Sonst war diese Variable immer 0 oder 2, aber sie war schon vorhanden. es gab aber keine Probleme.
Kann das irgendwas mit der "magischen Grenze" 10 zu tun haben? oder mit der art und weise, wie c++ und java einzelnen Bytes speichern?
LG, Hannes
Ich hab ein C++-Programm (MFC), mit dem eine Datei gespeichert wird. Ich habe da eine Liste von Instanzen einer Klasse, die aus Byte-, Short- und Char-Daten besteht. Diese werden mit der Funktion fwrite(...) in eine Datei geschrieben.
Dann hab ich eine Java-Anwendung, die dann die Datei einlesen soll. Dies mache ich über eine eigene Klasse, die von DataInputStream abgeleitet ist. Ich habe für die Short- und Char-Werte die Lesefunktion überschrieben:
Code:
public short readShortCpp() throws EOFException {
try {
short returnCode = readShort();
returnCode = (short) (((returnCode >> 8) & 0xFF) |
((returnCode << 8) & 0xFF00));
return returnCode;
} catch (EOFException eof) { throw eof;}
catch (IOException e) {System.out.println(e);}
return 0;
}
public char readCharCpp() throws EOFException {
try {
char returnCode = readChar();
returnCode = (char) (((returnCode >> 8) & 0xFF) |
((returnCode << 8) & 0xFF));
return returnCode;
} catch (EOFException eof) { throw eof;}
catch (IOException e) {System.out.println(e);}
return 0;
}
Jetzt haben meine Elemente aus der Liste alle eine ID (vom Typ byte). Solange ich 10 Elemente habe, funktioniert alles super (id < 10). Aber sobald das elfte Element (id = 10) ausgelesen wird, bricht die Funktion mit unterschiedlichen Exceptions ab. Mal eine EOFException, mal eine IOException. Interessant ist dabei, dass es vorher nicht so war. und ich habe jetzt nur eine variable eines Elements mal auf 15 gesetzt (auch vom Typ byte). Sonst war diese Variable immer 0 oder 2, aber sie war schon vorhanden. es gab aber keine Probleme.
Kann das irgendwas mit der "magischen Grenze" 10 zu tun haben? oder mit der art und weise, wie c++ und java einzelnen Bytes speichern?
LG, Hannes