public BigInteger ToBigInteger() { var bitsInDigit = Process.Is64Bit() ? 30 : 15; long ob_size = this.ob_size.Read(); if (ob_size == 0) { return(0); } long count = Math.Abs(ob_size); // Read and parse digits in reverse, starting from the most significant ones. var result = new BigInteger(0); if (bitsInDigit == 15) { var digitPtr = new UInt16Proxy(Process, ob_digit.Address).GetAdjacentProxy(count); for (long i = 0; i != count; ++i) { digitPtr = digitPtr.GetAdjacentProxy(-1); result <<= bitsInDigit; result += digitPtr.Read(); } } else { var digitPtr = new UInt32Proxy(Process, ob_digit.Address).GetAdjacentProxy(count); for (long i = 0; i != count; ++i) { digitPtr = digitPtr.GetAdjacentProxy(-1); result <<= bitsInDigit; result += digitPtr.Read(); } } return(ob_size > 0 ? result : -result); }
public BigInteger ToBigInteger() { var bitsInDigit = Process.Is64Bit() ? 30 : 15; long ob_size = this.ob_size.Read(); if (ob_size == 0) { return 0; } long count = Math.Abs(ob_size); // Read and parse digits in reverse, starting from the most significant ones. var result = new BigInteger(0); if (bitsInDigit == 15) { var digitPtr = new UInt16Proxy(Process, ob_digit.Address).GetAdjacentProxy(count); for (long i = 0; i != count; ++i) { digitPtr = digitPtr.GetAdjacentProxy(-1); result <<= bitsInDigit; result += digitPtr.Read(); } } else { var digitPtr = new UInt32Proxy(Process, ob_digit.Address).GetAdjacentProxy(count); for (long i = 0; i != count; ++i) { digitPtr = digitPtr.GetAdjacentProxy(-1); result <<= bitsInDigit; result += digitPtr.Read(); } } return ob_size > 0 ? result : -result; }