我有一个包含160位的二进制字符串。 我试过了:
new BigInteger("0000000000000000000000000000000000000000000000010000000000000000000000000000001000000000010000011010000000000000000000000000000000000000000000000000000000000000", 2).toByteArray()
但它返回15字节数组,删除前导0字节。
我想保留前导0个字节,保留20个字节。
我知道其他一些方法可以实现这一点,但我想知道有没有更简单的方法可能只需要几行代码。
答案 0 :(得分: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 :(得分: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));
<强>输出:强>
Bytes: 20:[0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 65, -96, 0, 0, 0, 0, 0, 0, 0]