2013-07-06 55 views
-3

我試圖將160長度的二進制字符串轉換爲20個字節。我正在使用BigInteger來獲取一個字節數組。它只返回14個字節,我需要20個字節。使用BigInteger獲取字節數組給予二進制字符串,返回的字節數組dosen的包含0值字節

這裏是我的代碼:

BigInteger b = new BigInteger("0000000000000000000000000000000000000000000001010000000000000000000000000000010000010100001011111110000000000000000000000000000000000000000000000000000000000000", 2); 
byte[] newData = b.toByteArray(); 
ByteArrayOutputStream output = new ByteArrayOutputStream(20); 
for (int i = 0; i < 20 - newData.length; i++) { 
    output.write((byte) 0x00); 
} 
output.write(newData); 
newData = output.toByteArray(); 
+0

這樣做的目的是什麼?你可以正常創建一個字節數組,儘管你認爲我確信bigInteger正在做轉換正確 – aaronman

+3

你甚至讀過'toByteArray()'的文檔嗎? 「該數組將包含表示此BigInteger所需的最小字節數」。它修剪了前面的零,畢竟它期望處理數字。 –

+3

爲什麼你試圖在160字節中填入8個字節? – user2357112

回答

1

您可能已經知道這一點,但讓你做一個20字節數組:

byte [] arr = new byte[20]; 

然後你可以把想手動的元素。

您沒有得到預期結果的原因是因爲BigInteger正在修剪前導零,因此這可能不是您想要達到的效果的好工具。

你也可以創建一個字節數組的字符串。

String s = "9B7D2C34A3623432DF30641E6CECF6F";  
byte[] bytes = Hex.decodeHex(s.toCharArray()); 

對我來說,這似乎是創建你的數組的最佳方式。 順便說一句,這不是你的字符串的十六進制表示,你可以自己做

相關問題