문제

I'm trying to port a code from .NET which uses UInt64 everywhere, I've mostly succeeded using BigInteger, but unfortunately I've become stuck at something really simple as loading a BigInteger with a value from a table of hex values.

At some point I want to load a BigInteger with the positive 0x990951BA, only way I saw to do this was with BigInteger b = BigInteger.valueOf(0x990951BA), this of course does not work because Java treats the argument as a long, making it negative.

How can I achieve this?

Thank you.

도움이 되었습니까?

해결책

long is 64-bit in Java, so you should be able to use it as a direct substitute for UInt64. To specify a long literal, append an l to the constant to have it recognized as long rather than int.

BigInteger b = BigInteger.valueOf(0x990951BAl);

A fallback for values which are too big even for long is to parse it as text.

BigInteger b = new BigInteger("990951BA", 16);

다른 팁

Since you're porting code that uses unsigned longs, you may also want to look into UnsignedLong from Google Guava. (And also the UnsignedLongs helper class in the same package).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top