Java конвертировать byte[] в BigInteger
В 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
Я пытаюсь получить тот же результат в 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
Есть ли способ получить результат, который я получаю в Java с помощью JavaScript? И будет ли это возможно также, если массив имеет длину 32?
1 ответ
Решение
BigInteger(byte[])
принимает двоичное представление двоичного bigInt.fromArray()
принимает массив цифр с основанием по умолчанию 10.
Как сказал dave_thompson_085, вы можете использовать базу 256:
var bigInteger = bigInt.fromArray(bytes, 256);
console.log("bigInteger: " + bigInteger); // 108170603228769