Ich habe eine uint8 (vorzeichenlose 8-Bit-Ganzzahl) , die von einem UDP-Paket kommt. Java verwendet nur signierte Primitive. Wie analysiere ich diese Datenstruktur korrekt mit Java?
Lies es einfach als ein Byte und konvertiere dann in ein int.
%Vor%Die Bitmaske wird benötigt, da ansonsten Werte mit Bit 8 auf 1 in ein negatives int konvertiert werden. Beispiel:
%Vor% Wenn Sie danach die Bitmaske 0xFF anwenden, werden die führenden 1's gelöscht. Zu Ihrer Information: 0xFF == 0b11111111
0xFF & number
behandelt die Zahl als vorzeichenloses Byte. Der resultierende Typ ist jedoch int
Sie können 8-Bit in einem byte
speichern. Wenn Sie es wirklich in einen vorzeichenlosen Wert konvertieren müssen (und oft nicht), können Sie eine Maske verwenden
Sie können so etwas tun:
%Vor% Der Operator &
(wie alle Integer-Operatoren in Java) wandelt eightBits
in int
um (durch Vorzeichenerweiterung des Vorzeichen-Bits). Da dies Werte größer als 0x7f in negative int
-Werte verwandeln würde, müssen Sie alle bis auf die untersten 8 Bits ausblenden.
Tags und Links java bit-manipulation