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

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

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

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

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

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

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

2 ответов


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

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

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

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

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

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