使用 & 和 | 将 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
时,您会在前面留下 1
s。
例如:
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);
要知道为什么我们在前面看到 1
s,这里有一个很好的解释: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));
我需要使用 &
和 |
将 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
时,您会在前面留下 1
s。
例如:
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);
要知道为什么我们在前面看到 1
s,这里有一个很好的解释: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));