System.Numerics.BigNumber.HexNumberToBigInteger C# (CSharp) Метод

HexNumberToBigInteger() приватный статический Метод

private static HexNumberToBigInteger ( System.Numerics.BigNumberBuffer &number, System.Numerics.BigInteger &value ) : bool
number System.Numerics.BigNumberBuffer
value System.Numerics.BigInteger
Результат bool
        private unsafe static bool HexNumberToBigInteger(ref BigNumberBuffer number, ref BigInteger value)
        {
            if (number.digits == null || number.digits.Length == 0)
                return false;

            int len = number.digits.Length - 1; // Ignore trailing '\0'
            byte[] bits = new byte[(len / 2) + (len % 2)];

            bool shift = false;
            bool isNegative = false;
            int bitIndex = 0;

            // Parse the string into a little-endian two's complement byte array
            // string value     : O F E B 7 \0
            // string index (i) : 0 1 2 3 4 5 <--
            // byte[] (bitIndex): 2 1 1 0 0 <--
            //
            for (int i = len - 1; i > -1; i--)
            {
                char c = number.digits[i];

                byte b;
                if (c >= '0' && c <= '9')
                {
                    b = (byte)(c - '0');
                }
                else if (c >= 'A' && c <= 'F')
                {
                    b = (byte)((c - 'A') + 10);
                }
                else
                {
                    Debug.Assert(c >= 'a' && c <= 'f');
                    b = (byte)((c - 'a') + 10);
                }
                if (i == 0 && (b & 0x08) == 0x08)
                    isNegative = true;

                if (shift)
                {
                    bits[bitIndex] = (byte)(bits[bitIndex] | (b << 4));
                    bitIndex++;
                }
                else
                {
                    bits[bitIndex] = isNegative ? (byte)(b | 0xF0) : (b);
                }
                shift = !shift;
            }

            value = new BigInteger(bits);
            return true;
        }