Преобразовать произвольный размер байта [] в BigInteger [], а затем безопасно преобразовать обратно в точно такой же байт [], какие-нибудь подсказки? - PullRequest
4 голосов
/ 24 марта 2010

Я считаю, что преобразование именно в BigInteger [] было бы оптимальным в моем случае. Кто-нибудь сделал или нашел это написанное на Java и готов поделиться?

Итак, представьте, что у меня произвольный размер byte[] = {0xff,0x3e,0x12,0x45,0x1d,0x11,0x2a,0x80,0x81,0x45,0x1d,0x11,0x2a,0x80,0x81} Как мне преобразовать его в массив BigInteger и затем безопасно восстановить его обратно в исходный байтовый массив?

Ты заранее.

1 Ответ

7 голосов
/ 24 марта 2010

Использование BigInteger.toByteArray () и BigInteger (байт []) .

Согласно Javadoc, последний ...

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

Если ваше побайтное представление отличается, вам может потребоваться применить некоторые дополнительные преобразования.

РЕДАКТИРОВАТЬ - если вам нужно сохранить ведущий (то есть не-значим) нули, выполните следующие действия:

  1. При преобразовании из байтового массива в BigInteger также запишите размер байтового массива.Эта информация не закодирована в значении BigInteger.

  2. Когда вы преобразуете из BigInteger в байтовый массив, знак расширяет байтовый массив до той же длины, что и исходный байтовый массив.

EDIT 2 - если вы хотите превратить байтовый массив в массив BigIntegers, содержащий не более N байтов в каждом, вам необходимо создать временный массивразмером N, неоднократно 1) заполняйте его байтами из массива входных байтов (с левым заполнением в конце) и 2) используйте его для создания значений BigInteger с помощью конструктора выше.Может быть, 20 строк кода?

Но я откровенно озадачен тем, что вы (очевидно) выберете значение для N, основываясь на использовании памяти, а не на математическом алгоритме, который вы пытаетесь реализовать.

...