我必须以某种方式在 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)。然后,如果它是负数,则通过添加 264 或 1 << 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/