2012-03-07 3 views
46

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

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

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

Пробовал с помощью: String.format("%05X", decInt);

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

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

+5

Проблема заключается в том, что 'width' устанавливается методом формата, в данном случае 5, является минимальной шириной. – twain249

ответ

66

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

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

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

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

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

Кстати, 11 ->0000B, не 0000A по любому вашему вопросу.

+1

Хорошо, теперь это имеет смысл. Также вернулся и модифицировал A-> B, ура – Fitzoh

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