How do I convert a large binary String to byte array java?

后端 未结 3 1958
谎友^
谎友^ 2020-12-11 22:28

I have a large binary string \"101101110...\", and I am trying to store it into a byte array. what is the best way of doing it?

Lets say I have largeString = \"01001

相关标签:
3条回答
  • 2020-12-11 22:50

    Assuming that your binary string module 8 equals 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 讨论(0)
  • 2020-12-11 22:53

    Do it in a loop. Split the string at 8-character chunks and convert them separately. In "pseudocode" it's something like:

    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));
    
    0 讨论(0)
  • 2020-12-11 22:57

    You can easily build an ArrayList on which you can call toArray if you want an actual array;

    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]
    
    0 讨论(0)
提交回复
热议问题