Converti stringa binaria in array di byte

Ho una stringa di uno e zero che voglio convertire in una matrice di byte.

Ad esempio String b = "0110100001101001" Come posso convertirlo in un byte[] di lunghezza 2?

Analizzalo a un numero intero in base 2, quindi converti in un array di byte. In effetti, dal momento che hai 16 bit è il momento di rompere il short raramente usato.

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

Un altro approccio semplice è:

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

Supponendo che la tua stringa binaria possa essere divisa per 8 senza ottenere una pausa puoi usare il seguente metodo:

 /** * 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; } 

Non dimenticare di aggiungere la lib di guava alle tue dipendenze.

In Android dovresti aggiungere al gradle dell’app:

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

E aggiungi questo nel gradle del progetto:

 allprojects { repositories { mavenCentral() } } 

Aggiornamento 1

Questo post contiene una soluzione senza utilizzare Guava Lib.