2013-07-06 23 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()); 

对我来说,这似乎是创建你的数组的最佳方式。 顺便说一句,这不是你的字符串的十六进制表示,你可以自己做

相关问题