Java 中的 String.format() 和十六进制数字
Posted
技术标签:
【中文标题】Java 中的 String.format() 和十六进制数字【英文标题】:String.format() and hex numbers in Java 【发布时间】:2012-03-25 11:58:23 【问题描述】:我正试图弄清楚为什么String.format()
的行为方式如此。
上下文:系统编程类,编写汇编程序。
目标文件中有一个 5 个字符的十六进制字段,我是从一个值创建的。
尝试使用:String.format("%05X", decInt);
这适用于正数
(11 -> 0000B
)
但是它对负数失败
(-1 -> FFFFFFFF
而不是 FFFFF
)
我想我可以只取最后 5 个字符的子字符串,但我仍然想弄清楚它为什么会这样。
【问题讨论】:
问题是format方法设置的width
,这里是5,是最小宽度。
【参考方案1】:
格式宽度仅适用于创建最小位数,并且仅对前导零有影响。
您可以使用位掩码来代替子字符串:
String.format("%05X", decInt & 0x0FFFFF)
顺便说一句,11
-> 0000B
,而不是您问题中声称的0000A
。
【讨论】:
好的,现在说得通了。还回去修改了A->B,干杯【参考方案2】:格式中使用的宽度始终是最小宽度。在这种情况下,我建议不要使用子字符串操作:
String.format("%05X", decInt & 0xFFFFF);
【讨论】:
以上是关于Java 中的 String.format() 和十六进制数字的主要内容,如果未能解决你的问题,请参考以下文章
理解字符串格式化中的 Python %g,实现 Java String.format 行为
c#中string message = string.Format()的意义和用法