Frage

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.

War es hilfreich?

Lösung

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

Andere Tipps

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top