【发布时间】:2014-09-26 21:24:50
【问题描述】:
我有一个表示 64 位无符号整数的十六进制字符串。
我想在 java 中将其转换为十进制表示。
我想使用Long.parseLong("HexString", 16);,但在 java 中最左边的位是符号位,任何大于 2^31-1 的数字都不适合。
那么我如何转换和存储这些数据?
谢谢, 晴天
【问题讨论】:
标签: java long-integer unsigned
我有一个表示 64 位无符号整数的十六进制字符串。
我想在 java 中将其转换为十进制表示。
我想使用Long.parseLong("HexString", 16);,但在 java 中最左边的位是符号位,任何大于 2^31-1 的数字都不适合。
那么我如何转换和存储这些数据?
谢谢, 晴天
【问题讨论】:
标签: java long-integer unsigned
您可以使用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);
如果解析的值是负数,那么真正的无符号值是有符号值+264。
【讨论】: