internal static string BigIntegerToString(uint[] d, int sign, int radix, bool lowerCase) {
if (radix < 2) {
throw ExceptionUtils.MakeArgumentOutOfRangeException("radix", radix, "radix must be >= 2");
}
if (radix > 36) {
throw ExceptionUtils.MakeArgumentOutOfRangeException("radix", radix, "radix must be <= 36");
}
int dl = d.Length;
if (dl == 0) {
return "0";
}
List<uint> digitGroups = new List<uint>();
uint groupRadix = groupRadixValues[radix];
while (dl > 0) {
uint rem = div(d, ref dl, groupRadix);
digitGroups.Add(rem);
}
StringBuilder ret = new StringBuilder();
if (sign == -1) {
ret.Append("-");
}
int digitIndex = digitGroups.Count - 1;
char[] tmpDigits = new char[maxCharsPerDigit[radix]];
AppendRadix((uint)digitGroups[digitIndex--], (uint)radix, tmpDigits, ret, false, lowerCase);
while (digitIndex >= 0) {
AppendRadix((uint)digitGroups[digitIndex--], (uint)radix, tmpDigits, ret, true, lowerCase);
}
return ret.Length == 0 ? "0" : ret.ToString();
}