Подтвердить что ты не робот

String.format() и шестнадцатеричные числа в Java

Я пытаюсь понять, почему String.format() ведет себя так, как это делает.

Контекст: класс системного программирования, написание ассемблера.

В объектном файле есть 5-значное шестнадцатеричное поле, которое я создаю из значения.

Пробовал использовать: String.format("%05X", decInt);

Это работает как предназначено для положительных чисел (11 → 0000B) Однако он не работает для отрицательных чисел (-1 → FFFFFFFF вместо FFFFF)

Я предполагаю, что я мог бы просто взять подстроку из последних 5 символов, но мне все равно хотелось бы выяснить, почему она ведет себя таким образом.

4b9b3361

Ответ 1

Ширина, используемая в формате, всегда минимальная. В этом случае вместо использования операций подстроки я бы предложил:

  String.format("%05X", decInt & 0xFFFFF);

Ответ 2

Ширина формата работает только для создания минимального количества цифр и влияет только на ведущие нули.

Вместо подстроки вы можете использовать битовую маску:

String.format("%05X", decInt & 0x0FFFFF)

Кстати, 110000B, а не 0000A, как утверждается в вашем вопросе.