使用BigInteger从字节数组中获取二进制字符串,返回的字节数组dosen包含0个值字节

时间:2013-07-06 00:19:49

标签: java

我正在尝试将160个长度的二进制字符串转换为20个字节。我正在使用BigInteger来获取字节数组。它只返回14个字节,我需要20个字节。

这是我的代码:

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();

1 个答案:

答案 0 :(得分:1)

您可能已经知道这一点,但要创建一个20字节的数组:

byte [] arr = new byte[20];

然后您可以手动放置所需的元素。

你没有得到理想结果的原因是因为BigInteger正在修剪前导零,所以这可能不是你想要实现的好工具。

您也可以使用字符串来创建字节数组。

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

对我而言,这似乎是创建阵列的最佳方式。 顺便说一下,这不是你的字符串的十六进制表示,你可以自己做