2013-07-18 21 views
6

Bir bayt dizisine dönüştürmek istediğim bir dizi ve sıfır var.İkili dizgiyi bayt dizisine dönüştürme

Örneğin String b = "0110100001101001" Bunu bir byte[] uzunluk 2'ye nasıl dönüştürebilirim?

+0

Neden uzunluk 2? –

+3

@kocko'nun 16 biti var ... –

+0

Dize b'den çıkıp, byte [] uzunluk 2'yi '104' 0 konumunda ve' 105' 1 konumunda mı istiyorsunuz? –

cevap

21

Temel 2'de bir tam sayıya böler, ardından bir bayt dizisine dönüştürür. Aslında, 16 bite sahip olduğunuzdan, nadiren kullanılan short'un çıkma zamanı.

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

byte[] array = bytes.array(); 
+3

Dize, çok fazla bit içeriyorsa ne olur? ' Uzun bir değişkende bile tutulabilir mi? –

+0

Bu çok havalı! Bilmiyordum, teşekkürler! :) –

+0

Dize çok büyükse, bir "NumberFormatException" alırsınız. Bu küçük örnek için 32 karakterden az olduğu varsayımları yapıyorum. –

12

Başka basit bir yaklaşımdır:

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

ayrıştırılamıyor "1110100001101001" –

+0

Bkz. Http://stackoverflow.com/questions/24158629/biginteger-tobytearray-returns-purposeful-leading-zeros Bazı işaretleme sorunlarınız olabilir. – will

+0

Byte [] fspec = new BigInteger ("10000000", 2) .toByteArray() öğesini görüntülerken, beklenen değer yerine [B3b22cdd0] değerini gösterir - neden? – Line

0

yöntemiyle aşağıdaki kullanabileceğiniz bir dinlenme almadan ikili dize 8 ile ayrılabilir varsayarsak:

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

unutma bağımlılarınıza guava lib eklemek için.

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

Ve proje gradle içine bu ekleyin::

Android'de size uygulama gradle eklemeniz gereken

allprojects { 
    repositories { 
     mavenCentral() 
    } 
} 

Güncelleme 1

This post contains bir çözüm Guava Lib kullanmadan.