【问题标题】:Convert int to hex string [duplicate]将int转换为十六进制字符串[重复]
【发布时间】:2023-03-08 08:53:04
【问题描述】:

我有一个整数 1238,当我使用 Integer.toHexString 函数转换为十六进制字符串时,它会返回 4d6。有什么可能的方法可以格式化,所以它会返回 04d6 吗?如果您可以为一般情况而不是这种特定情况提供解决方案,那就太好了。 谢谢。

【问题讨论】:

  • 触发 "0" + Integer.toHexString() 有什么问题?准确地说:我建议使用“0x”作为前缀——“0”通常是八进制数字的前缀;不是十六进制。
  • 这是一个很好的学习体验问题。自己解决。 (大约有 20 种不同的处理方法,所以找到一种应该不难。)
  • 这篇文章展示了如何为 2 位数字执行此操作:stackoverflow.com/questions/8689526/… 这很容易扩展到 4 位数字

标签: java


【解决方案1】:
System.out.println(String.format("%04x",1238));  ->  "04d6"
System.out.println(String.format("%#04x",1238)); -> "0x4d6"

【讨论】:

  • 不适用于 123899 等较大的输入
  • 问题只是关于整数
  • 我的意思是,你的解决方案很聪明,但只适用于像 1238 这样的小整数,而不是 123899
  • 只是解决了问题中描述的问题。您的解决方案解决了问题中从未提及的问题。您不知道原始问题是否真的是“字符串长度不是 2 的倍数”,因为问题没有提及。
  • 说句公道话,他首先给出了一个具体的例子,然后说“如果你能为一般情况而不是这个具体情况提供解决方案,那就太好了”。我试图解决他的后一个要求。
【解决方案2】:

如果您可以为一般情况提供解决方案,那就太好了,而不是 这个具体案例

这是一个快速的解决方案,在十六进制字符串长度不是 2 的倍数的情况下添加一个左 0。

StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(myInt));
if (sb.length() % 2 > 0) {
    sb.insert(0, '0'); // pad with leading zero if needed
}
String hex = sb.toString();

【讨论】:

    猜你喜欢
    • 2017-05-29
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2018-07-03
    • 2020-12-09
    • 2020-07-18
    相关资源
    最近更新 更多