2013-07-18 6 views
6

바이트 배열로 변환 할 1과 0의 문자열이 있습니다.바이너리 문자열을 바이트 배열로 변환

예 : String b = "0110100001101001" 길이가 2 인 byte[]으로 변환하려면 어떻게해야합니까?

+0

왜 길이 2입니까? –

+3

@kocko 그는 16 비트를 가지고 있습니다 ... –

+0

문자열 b를 기반으로 바이트 0의 위치에 '104', 위치 1에 '105'의 길이 2가 필요합니까? –

답변

21

기본 2의 정수로 구문 분석 한 다음 바이트 배열로 변환하십시오. 실제로, 16 비트가 있기 때문에 드물게 사용되는 short을 찾아내는 시간입니다.

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

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

문자열에 너무 많은 비트가 들어있어 ' 장기 변수에서도 보류 할 것인가? –

+0

이것은 매우 멋지다! 나는 그것을 몰랐다, 고마워! :) –

+0

문자열이 너무 크면'NumberFormatException'을 얻습니다. 이 작은 예제에서는 32 자 미만이라는 가정을하고 있습니다. –

12

또 다른 간단한 방법은 다음과 같습니다

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

구문 분석 할 수 없습니다. "1110100001101001" –

+0

참조 http://stackoverflow.com/questions/24158629/biginteger-tobytearray-returns-purposeful-leading-zeros 일부 사안이있을 수 있습니다. – will

+0

byte [] fspec = new BigInteger ("10000000", 2) .toByteArray();가 표시 될 때 예상 값 대신 [B @ 3b22cdd0 - 왜? – Line

0

방법에 따라 사용할 수있는 휴식받지 않고 이진 문자열은 8로 나눈 수 있다는 가정 :

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

잊지 마세요를 종속물에 guava lib을 추가하십시오.

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

을 그리고 프로젝트 Gradle을에 이것을 추가 :

안드로이드에서 당신은 응용 프로그램 Gradle을 추가해야

allprojects { 
    repositories { 
     mavenCentral() 
    } 
} 

업데이트 1

This post contains 솔루션을 구아바 lib 디렉토리를 사용하지 않고.

관련 문제