Java конвертировать байт [] в BigInteger - PullRequest
0 голосов
/ 03 октября 2018

В 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 с использованием библиотеки big-integer .Но, как вы можете видеть, этот код возвращает другое значение:

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);

output:

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

Есть ли способ получить результат, который я получаю в Java с помощью JavaScript?И было бы это возможно также, если бы массив имел длину 32?

1 Ответ

0 голосов
/ 03 октября 2018

BigInteger(byte[]) принимает двоичное представление, дополняющее два, в то время как bigInt.fromArray() принимает массив цифр с основанием по умолчанию 10.

Как сказал dave_thompson_085, вы можете использовать базу 256:

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