我有一个表示64位unsigned int的十六进制字符串。
我想将它转换为java中的十进制表示。
我想使用Long.parseLong("HexString", 16);
,但在java中,最左边的位是符号位,任何大于2 ^ 31-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 。