我正在试图找出String.format()
行为方式的原因。
Context:系统编程类,编写汇编程序。
目标文件中有一个5个字符的十六进制字段,我从一个值创建。
尝试使用:String.format("%05X", decInt);
这适用于正数
(11 - > 0000B
)
然而它没有负数
(-1 - >> FFFFFFFF
代替FFFFF
)
我想我可以只取最后5个字符的子字符串,但我仍然想知道它为什么会这样。
答案 0 :(得分:78)
格式中使用的宽度始终是最小宽度。在这种情况下,我建议不要使用子字符串操作:
String.format("%05X", decInt & 0xFFFFF);
答案 1 :(得分:13)
格式宽度仅用于创建最小位数,并且仅对前导零有影响。
您可以使用位掩码代替子字符串:
String.format("%05X", decInt & 0x0FFFFF)
顺便说一句,11
- > 0000B
,而不是您问题中声明的0000A
。