gpt4 book ai didi

java - 如何读取未签名的 Java long 并将其值存储在 BigInteger 中?

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:22 24 4
gpt4 key购买 nike

我必须以某种方式在 Java 中处理 8 字节无符号整数类型。

我的 8 字节无符号整数存储在由 ByteBuffer 包装的字节数组中。它来自数据记录器数据库,包含非常大的数字。

这就是我处理 4 字节整数以将它们读取为无符号整数的方式:

((long) (bytebuffer.getInt() & 0xFFFFFFFFL));

不幸的是:

((BigInteger) (bytebuffer.getLong() & 0xFFFFFFFFFFFFFFFFL));

不起作用。

如何存储数字 2^64-1 并将其读取为 2^64-1

最佳答案

在 Java 中签名 long s,最高有效位的值是 -(263)。如果它是无符号的,那么该位的值为正 263。相差 264

首先,创建一个 BigInteger使用 long值(value)。然后,如果它是负数,则通过添加 2641 << 64 来应用无符号校正, 至 BigInteger .

BigInteger result = BigInteger.valueOf(bytebuffer.getLong());
if (result.compareTo(BigInteger.ZERO) < 0) {
result = result.add(BigInteger.ONE.shiftLeft(64));
}

关于java - 如何读取未签名的 Java long 并将其值存储在 BigInteger 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51218584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com