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

问题描述:

我有一个十六进制字符串表示一个64位无符号整数。将64位无符号整数(以十六进制字符串形式)转换为java中的十进制

我想将其转换为java中的十进制表示形式。

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

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

感谢, 阳光

您使用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 。