Как сказал Спаситель в комментарии :
BigInteger bi = new BigInteger(t, 16);
4294967295
Что пошло не так?
Вы переполняете int
в этой строке:
BigInteger bi2 = new BigInteger((int)val+"");
При обработке старшего F
в шестнадцатеричном 8-значном числе ваш double
равен 4.02653184E9 или 4026531840.0, нопреобразуется в максимально возможное значение int
, которое составляет всего 2147483647. Таким образом, ваш код работает для строк, которые вписываются в int
, вплоть до 7FFFFFFF
, но дает неверные результаты за пределами этого.