首页  > 教育解读  > 二进制数组怎么转换byte

二进制数组怎么转换byte

2025-05-01 21:52:17
花开花落
花开花落已认证

花开花落为您分享以下优质知识

将二进制数组转换为 `byte` 类型可以通过以下两种常见方法实现,具体选择取决于输入数据的格式:

一、将二进制字符串转换为 `byte` 数组

固定长度(8位)处理

若二进制字符串长度为8位,可直接使用 `Integer.parseInt` 转换:

```java

public static byte toByte(String bitStr) {

if (bitStr.length() != 8) return 0;

return Integer.parseInt(bitStr, 2);

}

```

若最高位为 `1`,表示负数,需进行补码转换:

```java

if (bitStr.charAt(0) == '1') {

return (byte) (Integer.parseInt(bitStr, 2) - 256);

} else {

return (byte) Integer.parseInt(bitStr, 2);

}

```

可变长度处理

若二进制字符串长度不是8的倍数,需先补零:

```java

public static byte[] convertBinaryStringToByteArray(String binaryString) {

int paddedLength = (8 - binaryString.length() % 8) % 8;

String paddedBinaryString = String.format("%0" + paddedLength + "s", binaryString)

.replace(' ', '0');

BigInteger bigInteger = new BigInteger(paddedBinaryString, 2);

return bigInteger.toByteArray();

}

```

二、将二进制数据(字符数组)转换为 `byte` 数组

若输入是字符数组(如每8位用逗号分隔的字符串),需逐个解析:

```java

public static byte[] byte2String(String binaryByteString) {

String[] binaryStr = binaryByteString.split(",");

byte[] byteArray = new byte[binaryStr.length];

for (int i = 0; i < byteArray.length; i++) {

byteArray[i] = parse(binaryStr[i]);

}

return byteArray;

}

private static int parse(String str) {

if (str.length() == 8) {

return str.equals("0") ? 0 : (int) Integer.parseInt(str, 2) - 256;

} else {

throw new IllegalArgumentException("Each segment must be 8 bits");

}

}

```

示例代码汇总

以下是综合上述方法的完整示例:

```java

public class BinaryConverter {

// 8位二进制字符串转byte

public static byte toByte(String bitStr) {

if (bitStr.length() != 8) return 0;

return bitStr.charAt(0) == '1' ? (byte) (Integer.parseInt(bitStr, 2) - 256) : (byte) Integer.parseInt(bitStr, 2);

}

// 可变长度二进制字符串转byte数组

public static byte[] convertToByteArray(String binaryString) {

int paddedLength = (8 - binaryString.length() % 8) % 8;

String paddedBinaryString = String.format("%0" + paddedLength + "s", binaryString)

.replace(' ', '0');

return new byte[paddedBinaryString.length() / 8];

}

// 字符数组转byte数组(每8位分隔)

public static byte[] byte2String(String binaryByteString) {

String[] binaryStr = binaryByteString.split(",");

byte[] byteArray = new byte[binaryStr.length];

for (int i = 0; i < byteArray.length; i++) {

byteArray[i] = parse(binaryStr[i]);

}

return byteArray;

}

private static int parse(String str) {

if (str.length() == 8) {

return str.equals("0") ? 0 : (int) Integer.parseInt(str, 2) - 256;

} else {

throw new IllegalArgumentException("Each segment must be 8 bits");

}

}

public static void main(String[] args) {

// 示例1:8位二进制转byte

String binary = "11001110";

byte b = toByte(binary);

System.out.println(b); // 输出 -106

// 示例2:可变长度二进制转byte数组

String binaryStr = "110011101010";

byte[] byteArray = convertToByteArray(binaryStr);

for (byte b : byteArray) {

System.out.printf("%08b ", b); // 补零输出

}

// 示例3:字符数组转byte数组

String binaryByteString = "01,10,011,00";

byte[] byteArray