Насколько я знаю, API-интерфейс BigInteger
не предоставляет никаких функций заполнения, поэтому вы должны выполнить заполнение самостоятельно:
Для BigInteger bigInt
используйте
byte[] array = bigInt.toByteArray();
int len = array.length, len8 = len+7 & ~7;
if(len != len8) {
int pad = len8 - len;
byte[] nArray = new byte[len8];
if(bigInt.signum() < 0) Arrays.fill(nArray, 0, pad, (byte)-1);
System.arraycopy(array, 0, nArray, pad, len);
array = nArray;
}
- Во-первых, используйте
toByteArray()
для получения байтового массива - рассчитайте следующий кратный восьми для длины массива
- Если это число не совпадает с длиной, вынужно заполнить
- выделить массив необходимого размера
- заполнить заполнение
-1
(расширение знака), если оно отрицательное (в другом случае оно уже имеет требуемые нули) - копирование оригинальных байтов
Обратите внимание, что расширенный массив со знаком все еще совместим с конструктором BigInteger(byte[])
, поэтому assert bigInt.equals(new BigInteger(array));
после операции никогда не должен завершаться ошибкой.