【问题标题】:String.format() and hex numbers in JavaJava 中的 String.format() 和十六进制数字
【发布时间】:2012-03-25 11:58:23
【问题描述】:

我正试图弄清楚为什么String.format() 的行为方式如此。

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

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

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

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

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

【问题讨论】:

  • 问题是format方法设置的width,这里是5,是最小宽度。

标签: java string formatting hex twos-complement


【解决方案1】:

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

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

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

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

【讨论】:

  • 好的,现在说得通了。还回去修改了A->B,干杯
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-07-22
    • 2012-10-31
    • 2020-02-09
    • 2019-06-16
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多