【问题标题】:How to convert 'unsigned long' to string in java如何在java中将'unsigned long'转换为字符串
【发布时间】:2013-08-14 18:49:19
【问题描述】:

很明显java没有'unsigned long'类型,而我们可以使用long来存储无符号数据。那么如何将其转换为字符串或仅以“无符号”方式打印?

【问题讨论】:

  • “以未签名方式打印”是什么意思?

标签: java long-integer


【解决方案1】:
long quot = (number >>> 1) / 5L; // get all digits except last one
long rem = number - quot * 10L; // get last digit with overflow trick
String out = Long.toString(quot) + rem;

【讨论】:

【解决方案2】:

正如在 SO 上的 different question 中提到的,有一种从 Java 8 开始的方法:

System.out.println(Long.toUnsignedString(Long.MAX_VALUE)); // 9223372036854775807
System.out.println(Long.toUnsignedString(Long.MIN_VALUE)); // 9223372036854775808

【讨论】:

    【解决方案3】:

    您可以使用第三方库吗? Guava 的 UnsignedLongs.toString(long) 就是这样做的。

    【讨论】:

      【解决方案4】:

      不幸的是,您需要使用 BigInteger,或者编写自己的例程。

      这是一个Unsigned 类,它有助于解决这些变通方法

      private static final BigInteger BI_2_64 = BigInteger.ONE.shiftLeft(64);
      
      public static String asString(long l) {
          return l >= 0 ? String.valueOf(l) : toBigInteger(l).toString();
      }
      
      public static BigInteger toBigInteger(long l) {
          final BigInteger bi = BigInteger.valueOf(l);
          return l >= 0 ? bi : bi.add(BI_2_64);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2016-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多