57

我试图弄清楚为什么String.format()会这样。

上下文:系统编程课,编写汇编程序。

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

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

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

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

4

2 回答 2

85

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

  String.format("%05X", decInt & 0xFFFFF);
于 2012-03-07T22:50:34.783 回答
14

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

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

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

顺便说一句,11->与您的问题0000B0000A所声称的不同。

于 2012-03-07T22:53:16.140 回答