使用 & 和 | 将 java 中的字节转换为整数

convert byte to integer in java using & and |

我需要使用 &| 将 1 字节转换为整数。转换后的输出必须是具有这些字节的整数:(0xFF)(byte)(byte)(byte).

例如:
输入:

00000111  

输出:

11111111000001110000011100000111

如果字节在 [0, 127]

范围内,我的代码就可以工作
int integer=7;
byte a=(byte)integer;
int b=(0xFF<<24)|(a<<16)|(a<<8)|(a);
System.out.println(Integer.toBinaryString(b));

如果字节在 [-128, -1] 范围内,则不起作用

输入:

10000000

错误输出:

11111111111111111111111110000000

预期输出:

11111111100000001000000010000000

发生这种情况是因为当您移动 a 时,您会在前面留下 1s。

例如:

a<<16 给你 11111111100000000000000000000000 但你想要 100000000000000000000000

a<<8 给你 11111111111111111000000000000000 但你想要 1000000000000000

所以我们需要通过 & 0xFF

来屏蔽那些在前面添加的额外 1

所以替换这个

int b=(0xFF<<24)|(a<<16)|(a<<8)|(a);

有了这个

int b = (0xFF<<24)|((a & 0xFF)<<16)|((a & 0xFF)<<8)|(a & 0xFF);

要知道为什么我们在前面看到 1s,这里有一个很好的解释:Odd behavior when Java converts int to byte?

试试这个。基本上就是左移,and,and or操作。

byte a = (byte)240;
byte b = (byte)128;
byte c = 15;
int v = IntStream.of(0xFF, b, c, d).map(by-> by & 0xFF).reduce(0,
            (r, s) -> (r << 8) | s);

System.out.println(Integer.toBinaryString(v));