Java原语长溢出

问题描述 投票:0回答:1

C#系统通过primitiveType =“uint64”(long)使用SBE(简单二进制编码)生成数据并向另一个Java系统提供数据。

在Java中,当数据被接收为原始数据时,它会溢出,并且在少数情况下会导致-ve数。

如何处理这种情况?

java integer-overflow
1个回答
1
投票

你可以接收无符号长long,因为长期不计算“长”。您甚至可以使用Long.toUnsignedString(n)显示无符号长度。

否则将它存放在BigInteger中。理想情况下加载为8个大端字节。

// Some snippets, unordered, showing useful constructs.
long n = ...;
n = Long.reverseBytes();
byte[] bigendian = new byte[8];
ByteBuffer buf = ByteBuffer.wrap(bigendian); // .order(ByteOrder.LITTLE_ENDIAN);
buf.putLong(n);

// Creating a BigInteger from unsigned long's bytes, requiring big-endian order.
BigInteger num = new BigInteger(1, bigendian); // 1 = positive
© www.soinside.com 2019 - 2024. All rights reserved.