Java Wie parst du uint8 in Java?

7

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?

    
stackoverflow 28.12.2012, 14:55
quelle

5 Antworten

13

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

    
Martijn Courteaux 28.12.2012, 14:58
quelle
3

0xFF & number behandelt die Zahl als vorzeichenloses Byte. Der resultierende Typ ist jedoch int

    
Prince John Wesley 28.12.2012 14:57
quelle
3

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

%Vor%     
Peter Lawrey 28.12.2012 14:57
quelle
2

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.

    
Ted Hopp 28.12.2012 14:58
quelle
1

Sie könnten es einfach in ein short oder ein int zerlegen, die genügend Spielraum haben, um alle Werte eines vorzeichenlosen Bytes zu speichern.

    
Asik 28.12.2012 14:59
quelle

Tags und Links