2012-04-16 10 views
0

Я пытаюсь перенести код из .NET, который использует UInt64 во всем мире, мне в основном удалось использовать BigInteger, но, к сожалению, я застрял в чем-то очень просто, так как загрузка BigInteger со значением из таблицы шестнадцатеричных значений.Загрузка BigInteger с большим положительным номером

В какой-то момент я хочу, чтобы загрузить BigInteger с положительным 0x990951BA, только так, как я видел, чтобы сделать это с BigInteger Ь = BigInteger.valueOf (0x990951BA), это, конечно, не работает, потому что Java обрабатывает аргумент как долго, делая его отрицательным.

Как я могу это достичь?

спасибо.

ответ

2

long - это 64-разрядная версия Java, поэтому вы можете использовать ее как прямую замену UInt64. Чтобы указать литерал long, добавьте l к константе, чтобы она распознавалась как long, а не int.

BigInteger b = BigInteger.valueOf(0x990951BAl); 

Откат для значений, которые слишком велики даже надолго, состоит в том, чтобы анализировать его как текст.

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

Работал с C# слишком долго! :) спасибо, я не понял, что Java обрабатывает мое шестнадцатеричное значение как int вместо длинного! –

0

С портировании кода, который использует неподписанные лонги, вы также можете посмотреть в UnsignedLong от Google Guava. (А также вспомогательный класс UnsignedLongs в том же пакете).