Question

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.

Was it helpful?

Solution

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);

OTHER TIPS

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).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top