【问题标题】:How to format string in hex in Java? [duplicate]如何在Java中以十六进制格式化字符串? [复制]
【发布时间】:2021-09-18 06:07:09
【问题描述】:

我想在 Java 中将字符串格式化为十六进制。

例如输入:123123,输出:1E 0F 03

这是我的代码:

String.format("%02X", integer)

【问题讨论】:

标签: java string hex


【解决方案1】:

尝试类似:

        int n = 123123;
        StringBuilder sb = new StringBuilder();
        String sep = "";
        while (n > 0) {
            int nybble = n & 0xFF;
            sb.insert(0, sep);
            sb.insert(0, String.format("%02X", nybble));
            sep = " ";
            n >>>= 8;
        }
        System.out.println(sb.toString());

【讨论】:

  • 您知道可以附加 StringBuilder 调用吗?所以你可以做sb.insert(0, sep).insert(0, String.format("%02X", nybble));
  • > 你知道你可以追加 StringBuilder 调用吗?chain 调用。是的,我做到了,但我认为在这种特殊情况下不这样做可能会使代码更清晰。
【解决方案2】:

你可以这样做

  • 将值转换为大写十六进制
  • 根据长度添加“0”
  • 然后拆分并重新加入(正则表达式在每两个字符后的零宽度区域拆分)。
for (int val : new int[] { 123123, 122, 94392, 9200812 }) {
    String valStr = String.format("%X",val);
    valStr = (valStr.length() % 2 == 0 ? "" : "0") + valStr;
    String result = String.join(" ", valStr.split("(?<=\\G(..))"));
    System.out.printf("%7d = %10s = %s%n", val, valStr, result);
}

打印

 123123 =     01E0F3 = 01 E0 F3
    122 =         7A = 7A
  94392 =     0170B8 = 01 70 B8
9200812 =     8C64AC = 8C 64 AC

【讨论】:

    猜你喜欢
    • 2019-09-26
    • 2023-01-18
    • 2022-07-08
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    相关资源
    最近更新 更多