我正在尝试使用LargeInteger
bitLength()
转换为未知长度的byte[]
static byte[] encodeint(LargeInteger y) {
//byte[] in = y.toByteArray();
byte[] in = new byte[(int)Math.ceil((double)y.bitLength() / 8.0)];
y.toByteArray(in, 0);
//
byte[] out = new byte[in.length];
for (int i=0;i<in.length;i++) {
out[i] = in[in.length-1-i];
}
return out;
}
但执行者返回
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
指向y.toByteArray(in, 0);
。
如何正确设置in
的长度?
(评论的代码是转换后的BigInteger
代码的剩余部分。)
答案 0 :(得分:2)
toByteArray的javadoc告诉你
java.lang.IndexOutOfBoundsException - 如果bytes.length&lt; (bitLength()&gt;&gt; 3)+ 1
因此应该是>= (bitLength() >> 3) + 1
除了你没有添加1之外,你所做的几乎是一样的。
所以(int)Math.ceil((double)y.bitLength() / 8.0) -1
但更容易使用文档版本
y.(bitLength() >> 3) + 1