
花开花落为您分享以下优质知识
将二进制数组转换为 `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