gpt4 book ai didi

java - 将字节数组转换为BigInteger

转载 作者:行者123 更新时间:2023-12-01 00:46:45 29 4
gpt4 key购买 nike

我的数字从左到右为256,以字节数组表示。我想将它们转换为BigInteger,这样以下示例将起作用:


[5]-> 5
[200]-> 200
[0,1]-> 256
[100,2]-> 612


我想出了以下解决方案:

    byte[] input = new byte[]{(byte) 200,2};
BigInteger a = BigInteger.ZERO;
BigInteger base = BigInteger.valueOf(256);
for (int i = 0; i < input.length; i++) {
a = a.add(BigInteger.valueOf(input[i] & 0xFF).multiply(base.pow(i)));
}
System.out.println(a);


虽然有效,但感觉效率很低。有更有效的方法吗?

最佳答案

从字节数组创建BigInteger的最简单方法是使用new BigInteger​(byte[] val)构造函数:


将包含BigInteger的二进制补码二进制表示形式的字节数组转换为BigInteger。假定输入数组为大端字节序:最高有效字节位于第零个元素中。


由于您的输入数组为低位字节序,并且您不希望返回负数,因此需要反转字节并确保第一个字节为0-127,因此未设置符号位。最简单的方法是使第一个字节0

示例:[2, 20, 200]-> [0, 200, 20, 2]

这是该代码:

private static BigInteger toBigInt(byte[] arr) {
byte[] rev = new byte[arr.length + 1];
for (int i = 0, j = arr.length; j > 0; i++, j--)
rev[j] = arr[i];
return new BigInteger(rev);
}


测试

byte[][] data = { {5},
{(byte)200},
{0,1},
{100,2} };
for (byte[] arr : data)
System.out.println(toBigInt(arr));


输出量

5
200
256
612

关于java - 将字节数组转换为BigInteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48372017/

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