2013-07-11 57 views
1

我有一個包含160位數字的二進制字符串。 我曾嘗試:如何將160位二進制字符串轉換爲20字節數組?

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

但它返回的15個字節數組移除前導0字節。

我想保留那些領先的0字節,保持它20個字節。

我知道一些其他的方法來實現,但我想知道有沒有更簡單的方法可能只需要幾行代碼。

+1

您可以通過'8擴展您的陣列在左側的值爲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:

Bytes: 20:[0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 65, -96, 0, 0, 0, 0, 0, 0, 0] 
相關問題