String.format () и шестнадцатеричные числа в Java - PullRequest
55 голосов
/ 08 марта 2012

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

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

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

Попытка с использованием: String.format("%05X", decInt);

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

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

Ответы [ 2 ]

79 голосов
/ 08 марта 2012

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

  String.format("%05X", decInt & 0xFFFFF);
13 голосов
/ 08 марта 2012

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

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

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

Кстати, 11 -> 0000B, а не 0000A, как заявлено в вашем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...