12
votes

I have a string of ones and zeros that I want to convert to an array of bytes.

For example String b = "0110100001101001" How can I convert this to a byte[] of length 2?

3
@kocko he has 16 bits... - Vincent van der Weele
Based off of string b, you want a byte[] length 2 with 104 in position 0, and 105 in position 1? - Clark Kent
possible duplicate of convert a string to byte array - Shashi

3 Answers

24
votes

Parse it to an integer in base 2, then convert to a byte array. In fact, since you've got 16 bits it's time to break out the rarely used short.

short a = Short.parseShort(b, 2);
ByteBuffer bytes = ByteBuffer.allocate(2).putShort(a);

byte[] array = bytes.array();
22
votes

Another simple approach is:

String b = "0110100001101001";
byte[] bval = new BigInteger(b, 2).toByteArray();
2
votes

Assuming that your binary String can be divided by 8 without getting a rest you can use following method:

/**
 * Get an byte array by binary string
 * @param binaryString the string representing a byte
 * @return an byte array
 */
public static byte[] getByteByString(String binaryString){
    Iterable iterable = Splitter.fixedLength(8).split(binaryString);
    byte[] ret = new byte[Iterables.size(iterable) ];
    Iterator iterator = iterable.iterator();
    int i = 0;
    while (iterator.hasNext()) {
        Integer byteAsInt = Integer.parseInt(iterator.next().toString(), 2);
        ret[i] = byteAsInt.byteValue();
        i++;
    }
    return ret;
}

Don't forget to add the guava lib to your dependecies.

In Android you should add to app gradle:

compile group: 'com.google.guava', name: 'guava', version: '19.0'

And add this into project gradle:

allprojects {
    repositories {
        mavenCentral()
    }
}

Update 1

This post contains a solution without using Guava Lib.