我无法理解字节之间的相互转换,或者一般情况下的字节
byte b = (byte)170;
System.out.println("Byte to int" + (int)b);
为什么当我将 170 转换为一个字节然后将该字节转换为一个 int 时我得到 -86,正确的方法是什么?
编辑:好的,所以我的问题的答案非常简单(byte
范围从 -128 到 127)...
让我感到困惑的是,我真正想要的是二进制 10101010 在字节中,所以我想用 int 表示该数字并将其放入字节中。有人可以告诉我如何将该二进制数转换为一个字节吗?
最佳答案
170作为32位整数的二进制表示是
0000 0000 0000 0000 0000 0000 1010 1010
当您将其转换为 byte
时,它将变为 1010 1010
。由于 Java 中的所有整数都是有符号的,因此它将 1010 1010
视为 2's complement 8 位整数。那是 -86。
当您使用 (int) b
将此字节转换回整数时,它会得到 signed extended到:
1111 1111 1111 1111 1111 1111 1010 1010
这也是 -86。你想给它应用一个位掩码,所以它又变成了 170。
(int) (0xff & b)
将返回 170:
1111 1111 1111 1111 1111 1111 1010 1010
0000 0000 0000 0000 0000 0000 1111 1111 & (bitwise and)
---------------------------------------
0000 0000 0000 0000 0000 0000 1010 1010
关于java - 在 Java 中与字节相互转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8175455/