質問

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