String.format() and hex numbers in Java

JavaStringFormattingHexTwos Complement

Java Problem Overview


I'm trying to figure out why String.format() is behaving the way it does.

Context: Systems programming class, writing an assembler.

There is a 5 character hex field in the object file, which I am creating from a value.

Tried using: String.format("%05X", decInt);

This works as intended for positive numbers (11 -> 0000B) However it fails for negative numbers (-1 -> FFFFFFFF instead of FFFFF)

I suppose I could just take a substring of the last 5 characters, but I would still like to figure out why it behaves this way.

Java Solutions


Solution 1 - Java

The width used in format is always a minimum width. In this case, instead of using sub string operations I would suggest:

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

Solution 2 - Java

Format width only works to create a minimum number of digits, and only has effect on leading zeroes.

Instead of substring, you could use a bit mask:

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

By the way, 11 -> 0000B, not 0000A as claimed in your question.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFitzohView Question on Stackoverflow
Solution 1 - JavaDaniel MartinView Answer on Stackoverflow
Solution 2 - JavaBohemianView Answer on Stackoverflow