Java 字节数组转二进制字符串
在Java中,将字节数组(byte[])转换为二进制字符串有几种常见方法,以下是几种实现方式:

方法1:使用Integer.toBinaryString()
public static String bytesToBinaryString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
// 使用0xFF确保无符号转换
sb.append(String.format("%8s", Integer.toBinaryString(b & 0xFF)).replace(' ', '0'));
}
return sb.toString();
}
方法2:使用BigInteger
import java.math.BigInteger;
public static String bytesToBinaryString(byte[] bytes) {
return new BigInteger(1, bytes).toString(2);
}
方法3:手动转换
public static String bytesToBinaryString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append((b & 0x80) == 0 ? "0" : "1");
sb.append((b & 0x40) == 0 ? "0" : "1");
sb.append((b & 0x20) == 0 ? "0" : "1");
sb.append((b & 0x10) == 0 ? "0" : "1");
sb.append((b & 0x08) == 0 ? "0" : "1");
sb.append((b & 0x04) == 0 ? "0" : "1");
sb.append((b & 0x02) == 0 ? "0" : "1");
sb.append((b & 0x01) == 0 ? "0" : "1");
}
return sb.toString();
}
使用示例
public static void main(String[] args) {
byte[] bytes = {0x12, 0x34, 0x56, 0x78};
String binaryString = bytesToBinaryString(bytes);
System.out.println(binaryString); // 输出: 00010010001101000101011001111000
}
注意事项
- Java中的byte是有符号的,范围是-128到127,所以需要使用
& 0xFF进行无符号转换 - 方法1和方法3会确保每个字节转换为8位二进制,不足的前面补0
- 方法2可能会省略前导零,如果需要固定长度,可以额外处理
- 对于大数组,考虑使用StringBuilder而不是字符串拼接,以提高性能
选择哪种方法取决于你的具体需求,比如是否需要固定长度、性能要求等,方法1通常是平衡了可读性和性能的好选择。

