Строка.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
как утверждалось в вашем вопросе.