在Java中,我们可以使用Integer.toBinaryString(int)
将字节转换为代表二进制字符串。 查看Integer.toBinaryString(int)
方法签名,它将一个整数作为参数并返回一个String。
Integer.java
public final class Integer extends Number
implements Comparable<Integer>, Constable, ConstantDesc {
public static String toBinaryString(int i) {
return toUnsignedString0(i, 1);
}
//...
}
如果我们传递一个byte
到这种方法,Java将自动施放/拓宽byte
到int
和应用符号扩展 。 如果我们不想要符号扩展名,请使用0xff
屏蔽(按位和)。 为了进一步理解前面的语句,请阅读本章如何在Java中将字节转换为无符号字节 。
字节->整数->二进制
这个Java示例将一个字节打印为二进制字符串,并用零填充前导。
ByteToBinary.java
package com.mkyong.crypto.bytes;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ByteToBinary {
public static void main(String[] args) {
byte aByte = (byte) -2; // -2 (signed) and 254 (unsigned)
System.out.println("Input : " + aByte);
// byte to an unsigned integer
// & 0xff to prevent sign extension, no effect on positive
int result = aByte & 0xff;
System.out.println(result); // 254
System.out.println(Integer.toBinaryString(result)); // 1111 1110
String resultWithPadZero = String.format("%32s", Integer.toBinaryString(result))
.replace(" ", "0");
System.out.println(resultWithPadZero); // 00000000000000000000000011111110
System.out.println(printBinary(resultWithPadZero, 8, "|")); // 00000000|00000000|00000000|11111110
}
// pretty print binary with separator
public static String printBinary(String binary, int blockSize, String separator) {
// split by blockSize
List<String> result = new ArrayList<>();
int index = 0;
while (index < binary.length()) {
result.add(binary.substring(index, Math.min(index + blockSize, binary.length())));
index += blockSize;
}
return result.stream().collect(Collectors.joining(separator));
}
}
输出量
Terminal
Input : -2
254
11111110
00000000000000000000000011111110
00000000|00000000|00000000|11111110
对于Java 8,我们可以使用新的API将字节转换为无符号的int。
int result = Byte.toUnsignedInt(aByte);
参考文献
翻译自: https://mkyong.com/java/java-how-to-convert-a-byte-to-a-binary-string/