Die Konvertierung von vorzeichenbehafteten in vorzeichenlose Bytes kann in Java eine Herausforderung sein, da Java dies nicht nativ tut unterstützt vorzeichenlose Bytetypen. Wenn daher vorzeichenbehaftete Bytewerte empfangen und als solche interpretiert werden, können Probleme mit der Datenintegrität auftreten.
Um dieses Problem zu beheben, schlägt eine gängige Lösung die Verwendung einer bitweisen Operation vor wie folgt:
public static int unsignedToBytes(byte a) { int b = a & 0xFF; return b; }
Diese Methode erzielt jedoch nicht das gewünschte Ergebnis, da das Zurückweisen des zurückgegebenen Werts auf einen Bytetyp immer noch zu einer vorzeichenbehafteten Interpretation führt. Dies führt zu Datenverzerrungen.
Der Schlüssel zur Lösung dieses Problems liegt im Verständnis, dass Grundelemente in Java zwar signiert sind, ihre Darstellung im Speicher jedoch nicht. Hier ist eine modifizierte Lösung, die das Byte als vorzeichenlosen Wert interpretiert, indem es explizit heruntergestuft wird:
int i = 200; // 0000 0000 0000 0000 0000 0000 1100 1000 (200) byte b = (byte) i; // 1100 1000 (-56 by Java specification, 200 by convention) /* * When b is cast back to int, sign extension leads to: * 1111 1111 1111 1111 1111 1111 1100 1000 (-56) * * However, we choose to interpret this as +200 instead. */ System.out.println(b); // "-56" /* * To eliminate sign extension, we perform a bitwise AND with 0xFF: * 1111 1111 1111 1111 1111 1111 1100 1000 (the int) * & * 0000 0000 0000 0000 0000 0000 1111 1111 (0xFF) * ======================================= * 0000 0000 0000 0000 0000 0000 1100 1000 (200) */ System.out.println(b & 0xFF); // "200"
Im obigen Beispiel haben wir eine ganze Zahl i auf ein Byte b heruntergestuft, was dazu führt, dass der Wert als negativ interpretiert wird gemäß den vorzeichenbehafteten Byte-Spezifikationen von Java. Durch die manuelle bitweise UND-Verknüpfung von b mit 0xFF löschen wir jedoch effektiv die Vorzeichenerweiterung und rufen den korrekten vorzeichenlosen Wert ab.
Mit dieser Technik können Sie nahtlos mit vorzeichenlosen Bytewerten in Java arbeiten und so eine genaue Datenverarbeitung gewährleisten Interpretation innerhalb der Grenzen der Sprache.
Das obige ist der detaillierte Inhalt vonWie kann ich signierte Bytes in Java korrekt als nicht signierte Bytes behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!