Если у вас всегда есть 128-битные числа и вы предполагаете, что старшим битом является ваш знак, вы можете использовать следующие строки:
BigInteger neg = BigInteger.ONE.shiftLeft(127);
BigInteger b = new BigInteger("80000000000000004308000000000000", 16);
if(b.compareTo(neg) >= 0) {
b = neg.subtract(b);
}
Примечание: b.longValue()
будет уместно только в том случае, если число битов вписывается в длинное, что может не иметь места для таких больших чисел.