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

标签 java long-integer unsigned

我有一个表示 64 位无符号整数的十六进制字符串。

我想将其转换为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);

如果解析的值为负数,则真正的无符号值是有符号值 + 264

关于java - 在java中将64位无符号整数(十六进制字符串形式)转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26068555/

相关文章:

C++ 无符号 Shorts 除法结果为 int

java - graphql-java 与 graphql-java-tools 的使用区别

java - 使用Ant递归删除一种类型的所有文件

c# - 生成 C# 长唯一 ID

c++ - 了解无符号数的行为

c - 我在 x 中出现了多少次(无符号 32 位整数 C)

java - 如何知道线程是否被唤醒或时间片(Producer-Consumer)

java - 在 Java 中单击按钮启动和停止服务器

java - Android 支持 parseUnsignedLong 吗?

c++ - 长双增量运算符不适用于大数