Search code examples
javaandroidbigintegeruintuint64

Loading a BigInteger with a large, positive, number


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.


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