我正在尝试使用LargeIntegerbyte[]转换为未知长度的bitLength()

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代码中遗留下来的。)

最佳答案

toByteArray的Javadoc告诉您


  java.lang.IndexOutOfBoundsException-如果bytes.length > 3)+ 1


因此,应为>= (bitLength() >> 3) + 1

除了未添加1.以外,您所做的几乎相同。

所以(int)Math.ceil((double)y.bitLength() / 8.0) -1

但更易于使用文档版本
y.(bitLength() >> 3) + 1

关于java - 来自LargeInteger.bitLength()的byte []长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21290361/

10-10 14:00