有没有一种简单快捷的方法可以将 Java 有符号长字符串转换为无符号长字符串?
-1 -> "18446744073709551615"
-9223372036854775808 -> "09223372036854775808"
9223372036854775807 -> "09223372036854775807"
0 -> "00000000000000000000"
最佳答案
这是一个使用 BigInteger 的解决方案:
/** the constant 2^64 */
private static final BigInteger TWO_64 = BigInteger.ONE.shiftLeft(64);
public String asUnsignedDecimalString(long l) {
BigInteger b = BigInteger.valueOf(l);
if(b.signum() < 0) {
b = b.add(TWO_64);
}
return b.toString();
}
这是有效的,因为二进制补码中(有符号)数字的无符号值仅比有符号值多 2(位数),并且 Java 的 long
有 64 位。
BigInteger 有一个很好的 toString()
方法,我们可以在这里使用它。
关于Java:有符号长到无符号长字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031198/