在Java中将64位无符号整数(以十六进制字符串形式)转换为十进制

时间:2014-09-26 21:24:51

标签: java long-integer unsigned

我有一个表示64位unsigned int的十六进制字符串。

我想将它转换为java中的十进制表示。

我想使用Long.parseLong("HexString", 16);,但在java中,最左边的位是符号位,任何大于2 ^ 31-1的数字都不适合。

那我该如何转换和存储这些数据呢?

谢谢, 晴天

1 个答案:

答案 0 :(得分:7)

您可以使用constructor that takes a String and an int radix创建BigInteger

BigInteger bigInt = new BigInteger(hexString, 16);

如果您使用Java 8,则可以使用Long.parseUnsignedLong,这将允许您解析所有64位,即使通常将其置于Long.MAX_VALUE上的位也已设置。它仍然返回一个long,它在Java中仍然被签名,但它将被解析,就像它是一个未签名的long

long stillSigned = Long.parseUnsignedLong(hexString, 16);

如果解析的值为负,则真正的无符号值为有符号值+ 2 64