2013-07-11 9 views
1

나는 160 자릿수의 이진 문자열을 가지고있다.160 자리 이진 문자열을 20 바이트 배열로 변환하는 방법은 무엇입니까?

new BigInteger("0000000000000000000000000000000000000000000000010000000000000000000000000000001000000000010000011010000000000000000000000000000000000000000000000000000000000000", 2).toByteArray() 

을하지만 제거 선도 0 바이트와 15 바이트의 배열을 반환합니다 나는 노력했다.

나는 0 바이트를 선두로하고, 20 바이트를 유지하고 싶습니다.

나는 이것을 수행하는 다른 방법을 알고 있지만, 더 쉬운 방법은 단지 몇 줄의 코드 만 필요할 수도 있다는 것을 알고 싶습니다.

+1

왼쪽에 value = 0 인 currentSize 요소들 –

+2

' binStr'과 예상 출력? – anubhava

+1

@anubhava 그것은 OP의 코드 행에 의해 암시된다 :'binStr = "0011010111 ... 11"; array = {120, -145, ..., 20}'. –

답변

1

이유는 간단하지 :이 코드 같은

public static byte[] convert160bitsToBytes(String binStr) { 
    byte[] a = new BigInteger(binStr, 2).toByteArray(); 
    byte[] b = new byte[20]; 
    int i = 20 - a.length; 
    int j = 0; 
    if (i < 0) throw new IllegalArgumentException("string was too long"); 
    for (; j < a.length; j++,i++) { 
     b[i] = a[j]; 
    } 
    return b; 
} 
1

무언가가 당신을 위해 작동합니다 :

byte[] src = new BigInteger(binStr, 2).toByteArray(); 
byte[] dest = new byte[(binStr.length()+7)/8]; // 20 bytes long for String of 160 length 
System.arraycopy(src, 0, dest, 20 - src.length, src.length); 
// testing 
System.out.printf("Bytes: %d:%s%n", dest.length, Arrays.toString(dest)); 

OUTPUT : 당신은`8하여 배열을 확장 할 수 있습니다

Bytes: 20:[0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 65, -96, 0, 0, 0, 0, 0, 0, 0] 
관련 문제