GSF.Number.WriteToChars2 C# (CSharp) Method

WriteToChars2() public static method

public static WriteToChars2 ( this value, char destination, int position ) : int
value this
destination char
position int
return int
        public static unsafe int WriteToChars2(this uint value, char[] destination, int position)
        {
            uint temp;
            int digits;

            const uint Digits2 = 10;
            const uint Digits3 = 100;
            const uint Digits4 = 1000;
            const uint Digits5 = 10000;
            const uint Digits6 = 100000;
            const uint Digits7 = 1000000;
            const uint Digits8 = 10000000;
            const uint Digits9 = 100000000;
            const uint Digits10 = 1000000000;

            if (value >= Digits5)
            {
                if (value >= Digits8)
                {
                    if (value >= Digits10)
                        digits = 10;
                    else if (value >= Digits9)
                        digits = 9;
                    else
                        digits = 8;
                }
                else
                {
                    if (value >= Digits7)
                        digits = 7;
                    else if (value >= Digits6)
                        digits = 6;
                    else
                        digits = 5;
                }
            }
            else
            {
                if (value >= Digits3)
                {
                    if (value >= Digits4)
                        digits = 4;
                    else
                        digits = 3;
                }
                else
                {
                    if (value >= Digits2)
                        digits = 2;
                    else
                        digits = 1;
                }
            }

            if (destination.Length - position < digits)
                throw new Exception("Insufficient buffer space");

            fixed (char* str = &destination[position + digits - 1])
            {
                char* wstr = str;

                do
                {
                    temp = value / 10u;
                    *wstr = (char)(48u + (value - temp * 10u));
                    wstr--;
                    value = temp;

                } while (value != 0);

                return digits;
            }
        }