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;
}
}