Как конвертировать int [] в Big Integer? - PullRequest
1 голос
/ 09 октября 2011

Я хотел бы преобразовать целочисленный массив значений, которые были бы оригинальными байтами.

Ответы [ 2 ]

3 голосов
/ 09 октября 2011

Во-первых, убедитесь, что вы знаете, в каком формате должна интерпретироваться ваша int[].

Каждое int может рассматриваться как состоящее из четырех байтов, и эти байты вместе могут быть преобразованы в BigInteger.Детали - это порядок байтов - какой байт является самым, а какой - наименее значимым?

Кроме того, у вас есть число со знаком или без знака?

Простой способ преобразования вашего int s до byte s (для последующего использования в конструкторе BigInteger) будет использовать ByteBuffer и оборачивать IntBuffer вокруг него.

public BigInteger toBigInteger(int[] data) {
    byte[] array = new byte[data.length * 4];
    ByteBuffer bbuf = ByteBuffer.wrap(array);
    IntBuffer ibuf = bbuf.asIntBuffer();
    ibuf.put(data);
    return new BigInteger(array);
}

Очевидной адаптацией будет установка порядка байтов bbuf, или используйте другой конструктор BigInteger (для неподписанных).

2 голосов
/ 09 октября 2011

Ну, а как насчет new BigInteger (byte [] val) ?

Чтобы процитировать документы API, с которыми я связан:

Перевод байтового массивасодержащий двоичное представление двоичного представления BigInteger в BigInteger.Предполагается, что входной массив имеет порядок байтов с прямым порядком байтов: самый старший байт находится в нулевом элементе.

...