Hallo.
Ich steig gleich wieder aus!!
Also folgendes Verständisproblem in Sachen Java. Ich lese eine Datei binär byte für byte ein. Soweit so gut. Nun benötige ich allerdings die "echten" Werte der einzelnen Bytes und nicht die Interpretation als Datentyp byte, da der ja vorzeichenbehaftet ist und am 128 ins negative rutscht.
Nun hab ich versucht (so wie ich es aus ANSI C kenne) die mich interessierenden 4 bytes aus der Datei entsprechend in einen 32bit integer zu schieben um dann den entsprechenden Gesamtwert zu erhalten - den ich benötige. Das "kopieren" in den integer sollte vorzeichenunabhängig erfolgen... dachte ich zumindest...
In meinem Fall ist _4byte[3] zum Beispiel 9C also als byte genau -100. Leider behält JAVA diese interpretation auch bei bitoperationen offenbar bei, denn auch der integer ist dann -100, was mist ist, weil eigentlich sollte er 156 sein.
Und nu? Zurück zu ANSI C der wahren Programmiersprache...:toll:
Ich steig gleich wieder aus!!
Also folgendes Verständisproblem in Sachen Java. Ich lese eine Datei binär byte für byte ein. Soweit so gut. Nun benötige ich allerdings die "echten" Werte der einzelnen Bytes und nicht die Interpretation als Datentyp byte, da der ja vorzeichenbehaftet ist und am 128 ins negative rutscht.
Nun hab ich versucht (so wie ich es aus ANSI C kenne) die mich interessierenden 4 bytes aus der Datei entsprechend in einen 32bit integer zu schieben um dann den entsprechenden Gesamtwert zu erhalten - den ich benötige. Das "kopieren" in den integer sollte vorzeichenunabhängig erfolgen... dachte ich zumindest...
Java:
...
FileInputStream dateiname = new FileInputStream (fileName);
BufferedInputStream daten = new BufferedInputStream (dateiname);
byte[] _4byte = new byte[4];
//die ersten vier bytes lesen
daten.read(_4byte);
dateigroesse = _4byte[0];
dateigroesse = dateigroesse << 8;
dateigroesse = dateigroesse | _4byte[1];
dateigroesse = dateigroesse << 8;
dateigroesse = dateigroesse | _4byte[2];
dateigroesse = dateigroesse << 8;
dateigroesse = dateigroesse | _4byte[3];
...
In meinem Fall ist _4byte[3] zum Beispiel 9C also als byte genau -100. Leider behält JAVA diese interpretation auch bei bitoperationen offenbar bei, denn auch der integer ist dann -100, was mist ist, weil eigentlich sollte er 156 sein.
Und nu? Zurück zu ANSI C der wahren Programmiersprache...:toll:
Zuletzt bearbeitet von einem Moderator: