【问题标题】:How to have printf %x similar to python如何让 printf %x 类似于 python
【发布时间】:2013-11-26 05:02:40
【问题描述】:
>>> print "%x" % (-1234)
-4d2

在 Java/C 中是:fffffb2e

C:printf("%x", -1234)

Java:System.out.println(String.format("%x", -1234));

【问题讨论】:

  • 你尝试了哪些 Java 代码?
  • @ajb 我添加了 C/java 的代码
  • Java 结果是正确的。如果你想要非标准的十六进制格式,你需要自己做。

标签: java python c printf string-formatting


【解决方案1】:

这将满足您的要求:

int var = -1234;
System.out.println(String.format("%s%x", (var < 0 ? "-" : ""), Math.abs(var)));

如果要打印的值为负数,则插入一个减号,然后格式化数字的绝对值。

【讨论】:

  • 这是迄今为止最通用的方式,所有其他方式仅适用于 Java.. 但我仍在寻找更便宜的方式。
  • 如果你想要更简洁的东西,你可以在 Java 中使用System.out.printf。
【解决方案2】:

您可以为此使用Integer#toString(intVal, radix) 方法。

System.out.println(Integer.toString(1234, 16)); // 16 is the radix, thus hexadecimal
System.out.println(Integer.toString(1234, 2)); // 16 is the radix, thus binary

如果这是唯一的要求,您甚至可以使用Integer#toHexString(intVal) 直接将其转换为十六进制字符串。

【讨论】:

  • 查看 javadoc,toHexString 似乎会将 2^32 添加到负数,这并不能解决问题。但是带有基数的静态toString 似乎可以满足他的需求。附:第二行的注释是错误的...
  • 它适用于Java,但不够通用,我无法申请C
  • @w00d - 好吧,它的 Java 和 C 可能有类似的方式,但并非总是能得到适用于所有不同语言的通用方式。
【解决方案3】:

当您使用 %o 或 %x 格式时,Java 的 String.format 始终将整数参数视为无符号 - 除非参数是 BigInteger,否则它无法确定大小。试试这个:

long whateverValue = -1234;
System.out.println(String.format("%x", BigInteger.valueOf(whateverValue)));

(我认为这会起作用,但我还没有尝试过)

【讨论】:

    【解决方案4】:

    试试这个,
    System.out.println(Integer.toString(-1234, 16));

    【讨论】:

      【解决方案5】:

      您需要以不同于处理否定情况的方式处理非否定情况,因此需要一个条件。之后,只需适当地调用printf()。

      在 C 中:

      void printx (int x) {
          if (x >= 0) printf("%x", x);
          else printf("-%x", -x);
      }
      

      Java 类似:

      public static void printx (int x)
      {
          if (x >= 0) System.out.printf("%x", x);
          else System.out.printf("-%x", -x);
      }
      

      【讨论】:

        猜你喜欢
        • 2014-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多