11

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

4

5 回答 5

26

只需将其作为字节读取,然后转换为 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

于 2012-12-28T14:58:23.330 回答
5

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

于 2012-12-28T14:57:43.247 回答
5

您可以将 8 位存储在 abyte 如果您确实需要将其转换为无符号值(通常不需要),您可以使用掩码

byte b = ...
int u = b & 0xFF; // unsigned 0 .. 255 value
于 2012-12-28T14:57:46.630 回答
3

你可以这样做:

int value = eightBits & 0xff;

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

于 2012-12-28T14:58:05.320 回答
1

您可以简单地将其解析为 ashort或 an int,它们有足够的范围来保存无符号字节的所有值。

于 2012-12-28T14:59:04.323 回答