杰瑞科技汇

Java二进制如何转为byte数组?

Java 二进制字符串转 byte 数组

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

Java二进制如何转为byte数组?-图1
(图片来源网络,侵删)

逐位转换

public static byte[] binaryStringToByteArray(String binaryString) {
    // 确保字符串长度是8的倍数
    if (binaryString.length() % 8 != 0) {
        throw new IllegalArgumentException("二进制字符串长度必须是8的倍数");
    }
    byte[] byteArray = new byte[binaryString.length() / 8];
    for (int i = 0; i < binaryString.length(); i += 8) {
        String byteStr = binaryString.substring(i, i + 8);
        byte b = (byte) Integer.parseInt(byteStr, 2);
        byteArray[i / 8] = b;
    }
    return byteArray;
}

使用位操作

public static byte[] binaryStringToByteArray(String binaryString) {
    if (binaryString.length() % 8 != 0) {
        throw new IllegalArgumentException("二进制字符串长度必须是8的倍数");
    }
    byte[] byteArray = new byte[binaryString.length() / 8];
    for (int i = 0; i < binaryString.length(); i += 8) {
        byte b = 0;
        for (int j = 0; j < 8; j++) {
            if (binaryString.charAt(i + j) == '1') {
                b |= (1 << (7 - j)); // 最高位在前
            }
        }
        byteArray[i / 8] = b;
    }
    return byteArray;
}

使用 BigInteger(适用于超大二进制字符串)

import java.math.BigInteger;
public static byte[] binaryStringToByteArray(String binaryString) {
    // 去除可能的空格
    binaryString = binaryString.replaceAll("\\s", "");
    // 如果长度不是8的倍数,在前面补零
    if (binaryString.length() % 8 != 0) {
        int padding = 8 - (binaryString.length() % 8);
        binaryString = "0".repeat(padding) + binaryString;
    }
    // 转换为BigInteger,然后转换为byte数组
    BigInteger bigInt = new BigInteger(binaryString, 2);
    byte[] byteArray = bigInt.toByteArray();
    // 处理符号位问题
    if (byteArray.length * 8 > binaryString.length()) {
        // 如果转换后的数组比预期长,说明有符号位扩展,需要截断
        byte[] result = new byte[binaryString.length() / 8];
        System.arraycopy(byteArray, byteArray.length - result.length, result, 0, result.length);
        return result;
    }
    return byteArray;
}

使用示例

public static void main(String[] args) {
    String binaryStr = "10110011 01010101 11110000";
    byte[] byteArray = binaryStringToByteArray(binaryStr);
    for (byte b : byteArray) {
        System.out.print(String.format("%8s ", Integer.toBinaryString(b & 0xFF)));
    }
}

注意事项

  1. 二进制字符串长度必须是8的倍数,否则需要先进行填充或截断
  2. Java的byte是有符号的(-128到127),转换时要注意符号位
  3. 如果二进制字符串表示的是无符号整数,可能需要额外的处理
  4. 对于大文件或频繁转换,考虑性能优化

选择哪种方法取决于你的具体需求,特别是二进制字符串的大小和性能要求。

Java二进制如何转为byte数组?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇