- 既然把byte转为了8个bit位,那我们又怎么再把bit转回为byte呢?
/**
- 8个bit位转为byte
*/
public static byte bit2Byte(byte[] bytes) {
if (bytes.length != 8) return 0;
String binary = “”;
byte result;
for (byte b : bytes) {
binary += b;
}
if (bytes[0] == 0) {
// 正数
result = (byte) Integer.parseInt(binary, 2);
} else {
// 负数
result = (byte) (Integer.parseInt(binary, 2) - 256);
}
return result;
}
3.2 上面已经说了byte与bit的相互转化,现在就轮到int
了
- 上面已经说了一个
int
占4
个字节32
个bit
- Integer类已经为我们封装好了转bit的方法,如下:
String s = Integer.toBinaryString(35235);
//输出结果
1000100110100011
- 可以看到没有32位,这是为什么呢?这是因为高位都是为
0
所以就直接省略了,当然我们也可以主动补齐32
位只需要在高位补0
即可。 - bit再转回为int
int result = Integer.parseInt(“1000100110100011”, 2);
//输出结果
35235
- 这里需要注意的是Integer.toBinaryString()可以将负数转化为二进制,但是Integer.parseInt("", 2)不能直接将负数的二进制转为int,如下:
String radix = Integer.toBinaryString(-35235);
System.out.println(radix);
int result = Integer.parseInt(radix, 2);
System.out.println(result);
程序执行会报一个java.lang.NumberFormatException: For input string:"11111111111111110111011001011101"
异常,那我们怎么将负数的转回为int呢?当然是有方法的啦,如下:
//需要借助 BigInteger类
Str