Java如何在java中解析uint8?
我有一个来自UDP数据包的uint8 (无符号8位整数) 。 Java仅使用签名的基元。 如何使用java正确解析此数据结构?
只需将其作为一个字节读取,然后转换为int。
byte in = udppacket.getByte(0); // whatever goes here int uint8 = in & 0xFF;
需要位掩码,否则将位8设置为1的值转换为负int。 例:
This: 10000000 Will result in: 11111111111111111111111110000000
因此,当您向其应用位掩码0xFF时,前导1将被取消。 供您参考: 0xFF == 0b11111111
0xFF & number
将数字视为无符号字节。 但结果类型是int
你可以在一个byte
存储8位如果你真的需要将它转换为无符号值(通常你没有),你可以使用一个掩码
byte b = ... int u = b & 0xFF; // unsigned 0 .. 255 value
你可以这样做:
int value = eightBits & 0xff;
&
运算符(与Java中的所有整数运算符一样)将8位转换为int
(通过对符号位进行符号扩展)。 由于这会将大于0x7f的值转换为负int
值,因此您需要屏蔽除最低8位之外的所有值。
您可以简单地将其解析为short
或int
,它具有足够的范围来保存无符号字节的所有值。