Java字节数组中的无符号字节

pra*_*ect 0 java arrays unsigned byte

这似乎是一个简单的问题,但我很困惑.

byte[] bArray = new byte[]{(byte) (0x80 & 0xff)};
System.out.println(bArray[0]);
Run Code Online (Sandbox Code Playgroud)

我的输出是-128.为什么?我怎样才能重写这个,以便字节数组包含128?我以为是0xff无条件的.谢谢你的帮助!

Jon*_*eet 7

我以为0xff使它无符号.

嗯,确实如此 - 它将它提升为一个int,并保持最后的8位.

但是,然后,您将其结果转换回a byte,并且byteJava中的a 始终是签名的.(这很烦人,但它就是它的样子.)所以你可能只是写了:

byte[] bArray = { (byte) 0x80 };
Run Code Online (Sandbox Code Playgroud)

结果将完全相同.

你正在存储你想要存储的位模式(10000000),所以如果你在别处传输它,你不必担心......只是当你byte在Java中查看它时,它很烦人.