BigInteger (final byte[] bytes, final int offset) { long value = ((long)bytes[offset + BYTE_7] << BYTE_7_SHIFT) & BYTE_7_MASK; value += ((long)bytes[offset + BYTE_6] << BYTE_6_SHIFT) & BYTE_6_MASK; value += ((long)bytes[offset + BYTE_5] << BYTE_5_SHIFT) & BYTE_5_MASK; value += ((long)bytes[offset + BYTE_4] << BYTE_4_SHIFT) & BYTE_4_MASK; value += ((long)bytes[offset + BYTE_3] << BYTE_3_SHIFT) & BYTE_3_MASK; value += ((long)bytes[offset + BYTE_2] << BYTE_2_SHIFT) & BYTE_2_MASK; value += ((long)bytes[offset + BYTE_1] << BYTE_1_SHIFT) & BYTE_1_MASK; value += ((long)bytes[offset] & BYTE_MASK); final BigInteger val = BigInteger.valueOf(value); return (bytes[offset + BYTE_7] & LEFTMOST_BIT) == LEFTMOST_BIT ? val.setBit(LEFTMOST_BIT_SHIFT) : val; }