2017-02-06 30 views
1

BigInteger.toString (16) выполняет работу, но иногда количество байтов гексагона варьируется. Мне нужно ровно 512 байт hex каждый раз. Я также пробовал использовать Hex и DataTypeConverter от Apache и многое другое. Но никто не гарантирует эту последовательность. Есть ли какая-либо другая библиотека Java для генерации шестнадцатеричной фиксированной длины из заданного BigInteger?Как преобразовать BigInteger в Hex фиксированной длины?

PS: Я просмотрел stackoverflow перед публикацией, но не нашел обсуждения, посвященного проблеме с фиксированной длиной.

+4

Вы пробовали формат типа ''% 0512x "'? –

+1

Я думаю, вы имеете в виду «символы», а не «байты». И, конечно, 512 шестнадцатеричных символов много, но как бы вы гарантировали, что длина, если значение на самом деле слишком велико, чтобы вписаться в 512 символов? – GhostCat

+0

@GhostCat на самом деле это hex из privateKey-экспонента, длина бит которого около 2048. Вот почему он большой. – Pratap

ответ

5

, как указано в комментариях, используйте String s = String.format("%0512x", BigInteger.valueOf(theNumber))

Formatter поддерживает BigInteger: см документацию here.

+0

Будет ли это оценивать гекс BigInteger? – Pratap

+0

@Pratap Пожалуйста, внимательно прочитайте ** **. В этом ответе есть ** ссылка **, указывающая на документацию ** шаблонов ** форматирования. Не задавайте вопросов для материала, на который уже ответил. Просто прочитайте ответ ... так часто, как это требуется для его понимания ;-) ... и понимайте: BigInteger - это всего лишь числовое значение VALUE. Как выглядит строка, которая генерируется из этого значения, не имеет ничего общего с самим значением. BigInteger не является «шестнадцатеричным» (или не-шестнадцатеричным), это число. Hex входит, когда вы форматируете значение как строку! – GhostCat

+0

@ EmmanuelLonca благодарит за решение. Работал как шарм с незначительными изменениями. 'String s = String.format ("% 0512x", bigIntegerNumber)'. – Pratap

 Смежные вопросы

  • Нет связанных вопросов^_^