Java中的String.format()和十六进制数字

Fit*_*zoh 55 java string formatting hex twos-complement

我试图弄清楚为什么String.format()它的行为方式.

上下文:系统编程类,编写汇编程序.

目标文件中有一个5字符的十六进制字段,我从一个值创建.

尝试使用: String.format("%05X", decInt);

这适用于正数(11 - > 0000B)然而它不适用于负数(-1 - > FFFFFFFF而不是FFFFF)

我想我可以只取最后5个字符的子字符串,但我还是想弄清楚它为什么会这样.

Dan*_*tin 79

格式中使用的宽度始终是最小宽度.在这种情况下,我建议不要使用子字符串操作:

  String.format("%05X", decInt & 0xFFFFF);
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 13

格式宽度仅适用于创建最小位数,并且仅对前导零有影响.

您可以使用位掩码代替子字符串:

String.format("%05X", decInt & 0x0FFFFF)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,11- > 0000B,不像0000A你的问题所声称的那样.