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

标签 java arrays bit content-length jscience

我正在尝试转换 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/

相关文章:

java - 使用动态规划找零钱

java - 获取对象是否是通过反射创建的?

JavaScript 数组方法链接

java - 运算符 "&"不能应用于 byte、int、boolean

java - 在一个进程中,我们如何创建另一个进程,它是父进程的精确副本?

java - Jersey 制作媒体类型冲突

java - String(byte[]) 是否创建字节数组的深拷贝?

php - 将 2 个数组合并为 2d 数组而不丢失数据

c++ - 转换/旋转字节数组中的位

java - 位打包导致 Java 中的错误值