Существует готовая функция для преобразования чисел из базы 2, 8 или 16 в базу 10 (Convert.ToInt32
). Если вы хотите преобразовать числа из базы 26 или базы 27 в базу 10, вам придется сделать это самостоятельно.
Теперь, я никогда не слышал о числах 26, поэтому я просто предположу, что «цифры» - это от A до Z (A имеет значение 0, а Z имеет десятичное значение 25). Для преобразования из базы 26 в базу 10 вам нужно сделать следующее:
string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int GetDigitValue(char digit)
{
return charset.IndexOf(digit);
}
int ConvertFromBase26(string number)
{
int result = 0;
foreach(char digit in number)
result = result * charset.Length + GetDigitValue(digit);
return result;
}
Чтобы преобразовать из базы 27, просто добавьте любой символ, представляющий 26.
Примечание. Исправления ошибок нет (вы можете преобразовать строку "$ # $ @ # $ @", которая даст вам хорошее отрицательное число), а GetDigitValue довольно неэффективен и должен быть заменен таблицей поиска, если вы планируете делать эти преобразования много.
РЕДАКТИРОВАТЬ: версия LINQ, только для ударов.
Опять же, нет эффективного поиска и исправления ошибок, при условии, что строка состоит только из допустимых цифр.
string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int ConvertFromBase(string charset, string number)
{
return number.Select(c=>charset.IndexOf(c)).Aggregate(0, (x, y) => x*charset.Length +y);
}
Я думаю, что первая версия более читабельна.