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

Sun*_*nny 0 java unsigned long-integer

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

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

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

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

谢谢,Sunny

rge*_*man 7

您可以BigInteger使用带a Stringint基数构造函数创建一个.

BigInteger bigInt = new BigInteger(hexString, 16);
Run Code Online (Sandbox Code Playgroud)

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

long stillSigned = Long.parseUnsignedLong(hexString, 16);
Run Code Online (Sandbox Code Playgroud)

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