byte []的长度来自LargeInteger.bitLength()

时间:2014-01-22 17:54:56

标签: java bytearray bit content-length jscience

我正在尝试使用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代码的剩余部分。)

1 个答案:

答案 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