【问题标题】:How to format numbers to a hex strings?如何将数字格式化为十六进制字符串?
【发布时间】:2012-12-13 01:54:26
【问题描述】:

我想将 int 数字格式化为十六进制字符串。 System.out.println(Integer.toHexString(1)); 打印 1 但我希望它为 0x00000001。我该怎么做?

【问题讨论】:

标签: java formatting


【解决方案1】:

试试这个

System.out.println(String.format("0x%08X", 1));

【讨论】:

    【解决方案2】:

    您可以使用 String.format 将整数格式化为十六进制字符串。

       System.out.println(String.format("0x%08X", 1));
    

    即用零填充,使总宽度为 8。1 为您转换为十六进制。上面的行给出:0x00000001

       System.out.println(String.format("0x%08X", 234));
    

    给:0x000000EA

    【讨论】:

      【解决方案3】:

      来自 Java 的 Formatter 类中记录的格式化语法:

      Integer intObject = Integer.valueOf(1);
      String s = String.format("0x%08x", intObject);
      System.out.println(s);
      

      【讨论】:

        【解决方案4】:

        我不太了解 Java,但必须有一种方法可以将 toHexString 函数的输出用“0”填充到长度为 8。如果“0x”总是在开头,只需将该字符串添加到开头。

        【讨论】:

          【解决方案5】:

          Java 17+

          有一个新的不可变类专门用于转换和格式化十六进制数字。最简单的方法是使用包含前导零的HexFormat::toHexDigits

          String hex = "0x" + HexFormat.of().toHexDigits(1);
          // 0x00000001
          

          注意,必须与 "0x" 前缀连接,因为这种方法会忽略已定义的前缀和后缀,因此以下 sn-p 无法按预期工作(仅 HexFormat::formatHex 方法有效和他们一起):

          String hex = HexFormat.of().withPrefix("0x").toHexDigits(1);
          // 00000001
          

          返回 int 值的八个十六进制字符。从值的最高有效到最低有效的每个半字节(4 bits) 都被格式化为toLowHexDigit(nibble)不使用分隔符、前缀和后缀。

          或者利用HexFormat::formatHex格式化为两个十六进制字符的优势,以及将StringBuilder作为包含Appendable前缀的Appendable

          每个字节值被格式化为前缀,两个十六进制字符从大写或小写数字中选择,以及后缀。

          StringBuilder hex = HexFormat.of()
              .formatHex(new StringBuilder("0x"), new byte[] {0, 0, 0, 1});
          // 0x00000001
          
          StringBuilder hex = HexFormat.of()
              .formatHex(new StringBuilder("0x"), ByteBuffer.allocate(4).putInt(1).array());
          // 0x00000001
          

          【讨论】:

          • 很高兴知道 Java-17 中的这个新增功能。它显示了 Java 的发展势头。
          【解决方案6】:

          您可以在 PrintStream 上使用 java.util.Formatterthe printf method

          【讨论】:

            【解决方案7】:

            不那么冗长:

            System.out.printf("0x%08x", 1); //"Use %0X for upper case letters
            

            【讨论】:

              猜你喜欢
              • 2011-08-05
              • 1970-01-01
              • 2022-07-08
              • 1970-01-01
              • 2014-03-19
              • 2014-09-28
              • 2021-05-19
              • 1970-01-01
              相关资源
              最近更新 更多