如何将 Int 转换为无符号字节并返回

2022-08-31 09:58:19

我需要将数字转换为无符号字节。该数字始终小于或等于 255,因此它将适合一个字节。

我还需要将该字节转换回该数字。在Java中我该怎么做?我尝试了几种方法,但没有一种有效。以下是我现在要做的事情:

int size = 5;
// Convert size int to binary
String sizeStr = Integer.toString(size);
byte binaryByte = Byte.valueOf(sizeStr);

现在将该字节转换回数字:

Byte test = new Byte(binaryByte);
int msgSize = test.intValue();

显然,这是行不通的。由于某种原因,它始终将数字转换为 。有什么建议吗?65


答案 1

字节始终在 Java 中签名。不过,您可以通过二进制和0xFF来获得其无符号值:

int i = 234;
byte b = (byte) i;
System.out.println(b); // -22
int i2 = b & 0xFF;
System.out.println(i2); // 234

答案 2

Java 8 提供 Byte.toUnsignEdInt,通过无符号转换转换为 Byte.toUnsignEdInt。在Oracle的JDK中,这被简单地实现,因为HotSpot已经知道如何优化这种模式,但它可以嵌入到其他VM上。更重要的是,不需要先验知识来理解呼叫做什么。byteintreturn ((int) x) & 0xff;toUnsignedInt(foo)

总的来说,Java 8 提供了用于转换和转换为无符号和 、和 无符号的方法。转换为无符号的方法被故意省略,因为 JVM 只提供算术 on 和 anyway。byteshortintlongintlongbyteshortintlong

要将 int 转换回字节,只需使用强制转换:。由此产生的缩小基元转换将丢弃除最后 8 位之外的所有位。(byte)someInt