如何将一个大的二进制字符串转换成Java字节数组?

3
我有一个大的二进制字符串“101101110...”,想要将其存储到字节数组中。最好的方法是什么?
假设我有largeString = "0100111010111011011000000001000110101"
我期望的结果为:[78, 187, 96, 17, 21]
01001110 10111011 01100000 00010001 10101
我尝试过以下方法:
byte[] b= new BigInteger(largeString,2).toByteArray();
然而,这并没有给我我想要的结果...

所以你想要字节左对齐吗?另外,你得到的输出与你期望的输出有什么区别? - awksp
是的,我希望它左对齐。我的尝试得到的输出是: [9,-41,108,2,53] 1001 11010111 1101100 10 110101 - Lynct
一个字节无法存储187。范围值为[-128,127]。 - Alexis C.
@ZouZou 在Java中技术上是可以的;只是它不会显示为187。 - awksp
3个回答

7

如果你想要一个实际的数组,你可以轻松地构建一个ArrayList,并在其上调用toArray方法;

List<Integer> list = new ArrayList<>();

for(String str : largeString.split("(?<=\\G.{8})"))
    list.add(Integer.parseInt(str, 2));

System.out.println(list);  // Outputs [78, 187, 96, 17, 21]

好的,我为我的硬编码子字符串示例感到羞愧。非常好的正则表达式使用!不错的解决方案!! - pL4Gu33

1
假设您的二进制字符串模8等于0 binString.lenght()%8==0
 /**
 * Get an byte array by binary string
 * @param binaryString the string representing a byte
 * @return an byte array
 */
public static byte[] getByteByString(String binaryString) {
    int splitSize = 8;

    if(binaryString.length() % splitSize == 0){
        int index = 0;
        int position = 0;

        byte[] resultByteArray = new byte[binaryString.length()/splitSize];
        StringBuilder text = new StringBuilder(binaryString);

        while (index < text.length()) {
            String binaryStringChunk = text.substring(index, Math.min(index + splitSize, text.length()));
            Integer byteAsInt = Integer.parseInt(binaryStringChunk, 2);
            resultByteArray[position] = byteAsInt.byteValue();
            index += splitSize;
            position ++;
        }
        return resultByteArray;
    }
    else{
        System.out.println("Cannot convert binary string to byte[], because of the input length. '" +binaryString+"' % 8 != 0");
        return null;
    }
}

0

用循环实现。将字符串分割为8个字符的块并分别转换它们。在“伪代码”中,它大致是这样的:

byte[] result = new byte[subs.size()];

int i = 0;
int j = 0;
while(i+8 <= s.length){
    result[j] = new Byte.valueOf(largeString.substring(i, i+8), 2);
    i+=8;
    j++;
}

result[j] = new Byte.valueOf(largeString.substring(i, largeString.length));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接