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

时间:2012-03-07 22:39:54

标签: java string formatting hex twos-complement

我正在试图找出String.format()行为方式的原因。

Context:系统编程类,编写汇编程序。

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

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

这适用于正数 (11 - > 0000B) 然而它没有负数 (-1 - >> FFFFFFFF代替FFFFF

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

2 个答案:

答案 0 :(得分:78)

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

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

答案 1 :(得分:13)

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

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

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

顺便说一句,11 - > 0000B,而不是您问题中声明的0000A