如何转换';无符号长';用java编写字符串

如何转换';无符号长';用java编写字符串,java,long-integer,Java,Long Integer,很明显,java没有“unsigned long”类型,而我们可以使用long来存储未签名的数据。那么,如何将其转换为字符串或以“无符号”方式打印?不幸的是,您需要使用BigInteger,或者编写自己的例程 下面是一个帮助解决这些问题的类 private static final BigInteger BI_2_64 = BigInteger.ONE.shiftLeft(64); public static String asString(long l) { return l >

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

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

下面是一个帮助解决这些问题的类

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);
}

您可以使用第三方库吗?番石榴就是这样做的。

正如一篇文章中提到的,有一种方法可以从Java 8开始:

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

“以无符号方式打印”是什么意思?这实际上与Java8使用的算法相同。
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;