Строка.формат() и шестнадцатеричные числа в Java


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

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

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

попытался с помощью: String.format("%05X", decInt);

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

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

2 51

2 ответа:

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

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

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

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

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

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