gpt4 book ai didi

java - LargeInteger.bitLength() 的 byte[] 长度

转载 作者:行者123 更新时间:2023-12-02 06:17:51 25 4
gpt4 key购买 nike

我正在尝试转换 LargeInteger 进入byte[]使用 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 - if bytes.length < (bitLength() >> 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com