Java将byte []转换为BigInteger

时间:2018-10-03 08:24:49

标签: javascript java arrays biginteger uint8array

在Java中,我可以像这样从BigInteger那里获得String

public static void main(String[] args) {
    String input = "banana";
    byte[] bytes = input.getBytes(StandardCharsets.UTF_8);
    BigInteger bigInteger = new BigInteger(bytes);
    System.out.println("bytes:      " + Arrays.toString(bytes));
    System.out.println("bigInteger: " + bigInteger);
}

将打印哪个

bytes:      [98, 97, 110, 97, 110, 97]
bigInteger: 108170603228769

我正在尝试使用big-integer library在JavaScript中获得相同的结果。但是如您所见,此代码返回了另一个值:

var bigInt = require('big-integer');

function s(x) {
    return x.charCodeAt(0);
}

var bytes = "banana".split('').map(s);
var bigInteger = bigInt.fromArray(bytes);
console.log("bytes:      " + bytes);
console.log("bigInteger: " + bigInteger);

输出:

bytes:      98,97,110,97,110,97
bigInteger: 10890897

有没有办法用JavaScript在Java中获得结果? 如果数组的长度为32,那也有可能吗?

1 个答案:

答案 0 :(得分:1)

BigInteger(byte[])采用二进制补码二进制表示形式,而bigInt.fromArray()采用默认值为10的数字数组。

正如dave_thompson_085所说,您可以使用基数256:

var bigInteger = bigInt.fromArray(bytes, 256);
console.log("bigInteger: " + bigInteger); // 108170603228769