Java如何在Java中解析uint8?

Java如何在Java中解析uint8?,java,bit-manipulation,Java,Bit Manipulation,我有一个uint8(无符号8位整数)来自UDP数据包。Java只使用有符号的原语。如何使用java正确解析此数据结构?0xFF&number将数字视为无符号字节。但是结果类型是int如果确实需要将8位存储在字节中(通常不需要),可以使用掩码 byte b = ... int u = b & 0xFF; // unsigned 0 .. 255 value 您可以这样做: int value = eightBits & 0xff; &运算符(与Java中的所有整数运算符一样)将

我有一个uint8(无符号8位整数)来自UDP数据包。Java只使用有符号的原语。如何使用java正确解析此数据结构?

0xFF&number
将数字视为无符号字节。但是结果类型是
int

如果确实需要将8位存储在
字节中(通常不需要),可以使用掩码

byte b = ...
int u = b & 0xFF; // unsigned 0 .. 255 value

您可以这样做:

int value = eightBits & 0xff;

&
运算符(与Java中的所有整数运算符一样)将
eightBits
向上转换为
int
(通过符号扩展符号位)。由于这会将大于0x7f的值转换为负值
int
值,因此需要屏蔽除最低8位以外的所有位。

只需将其作为字节读取,然后转换为int

byte in = udppacket.getByte(0); // whatever goes here
int uint8 = in & 0xFF;
需要位掩码,否则,位8设置为1的值将转换为负整数。例如:

This:                                   10000000
Will result in: 11111111111111111111111110000000

因此,当您随后对其应用位掩码0xFF时,前导1将被取消。供您参考:
0xFF==0b11111111
您可以简单地将其解析为
short
int
,其范围足以容纳一个无符号字节的所有值。

谢谢,这是非常有用的。谢谢你的回答!非常感谢