Java:有符号长到无符号长字符串

标签 java

有没有一种简单快捷的方法可以将 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/

相关文章:

java - 正则表达式现在查找所有匹配的字符串

java - Java中两个异构系统的数据验证

java - 如何在 Java 中获取可滚动的结果集

java - servlet中调用方法

java - 如何在用户选择首选项后重新运行 onCreate。

java - Java 中 -Xmx 标志的有效值

java - Spring文件上传内容类型验证,总是八位字节流?

Java XML api 删除自结束标记之前的空格

java - 如何防止mac中显示java进程图标

javascript - 在 Javascript 中拆分 "@"之前的文本框文本值