Problem mit Einlesen vom Byte FF aus Dateien

  • Themenstarter Themenstarter Bebbo
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

Bebbo

Gast
Hallo!
Ich habe nach langem rumärgern und suchen nun erkannt, dass, wenn ich aus einer Datei, die(im Hexadezimaleditor) das Byte FF(also 255) enthält, es jedesmal als Byte des Wertes 63(hexadezimal 3f) in mein byte-Array aufgenommen wird. Woran kann das nur liegen?
 
Gut, offensichtlich war ich doch schneller...
Für alle die das selbe Problem haben:

Einige Bytes(z.b. 80 bis 9f) werden wegen doppelter Deutung als byte-Wert ungewünscht falsch ausgegeben. Ich denke, die einzige sinnvolle Lösung wäre hier statt byte-Arrays, int-Arrays zu verwenden!
Ist zwar schade um den Speicher, aber wenn von euch noch jemand eine andere Lösung findet, würde ich mich sehr über eine Antwort freuen.
 
Der Typ "byte" ist in Java vorzeichenbehaftet!
Code:
byte b = (byte)0xff; // ist -1, nicht 255
int i = b; // ist immer noch -1, nicht 255

Man kann sich mit Bitmasken helfen:
Code:
byte b = (byte)0xff; // ist -1, nicht 255
int i = b & 0xff; // ist 255, weil nur die niederwertigsten 8 Bit maskiert wurden

Zu beachten ist auch, daß ein Byte (und Short) vor jeder Operation automatisch und implizit in ein Int gecasted wird!!!
 
Vielen Dank für die Antwort!!
Das ist sehr hilfreich für mich...
Aber auf byte-Typen sind diese Masken nicht anwendbar, oder?
 
Man kann natürlich auch Bitoperationen auf Bytes anwenden, zu beachten ist aber, daß alleine der logische Operator (z.B. "&") das Byte in ein Int erweitert. Außerdem wäre der oben vorgestellte Tip natürlich sinnlos, wenn das Ergebnis der Ver-Und-ung mit 0xff wieder in ein Byte überwiesen würde:

Code:
byte b = 0xff;   // -1
byte c = (byte)( b & 0xff); // (b & 0xff) gibt +255, aber das Casten in ein Byte macht daraus wieder -1

Man muß sich halt ständig bewußt sein, daß in Java:

1) alle Integertypen vorzeihenbehaftet sind
2) Typen kleiner als int (char, short) bei jeder Operation implizit auf int erweitert werden.
 
Einige Bytes(z.b. 80 bis 9f) werden wegen doppelter Deutung als byte-Wert ungewünscht falsch ausgegeben. Ich denke, die einzige sinnvolle Lösung wäre hier statt byte-Arrays, int-Arrays zu verwenden!
Ist zwar schade um den Speicher, aber wenn von euch noch jemand eine andere Lösung findet, würde ich mich sehr über eine Antwort freuen.
völliger Quatsch, das einlesen von bytes aus dateien unter java funktioniert perfekt (wäre ja komisch, wenns anders wäre)

typische fehler:

die Ausgabe auf dem Bildschirm erfolgt natürlich vorzeichenbehaftet, macht aber nichts

wenn man + - * auf bytes anwendet, wird das ergebnis immer von typ int sein

manche nehmen Reader um binärdaten zu lesen, das geht nicht
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben