Переводим число из любой системы счисления в десятичную


Простой алгоритм перевода числа из любой системы счисления в десятичную.

Однажды потребовалось из шестнадцатеричной строки вида "0000FF6A9B4" получить число в десятичной системе счисления. Поиск привел к http://avprog.ru/public/70053/ но в этой статье мы видим обратный перевод из десятичной в другую систему. Пришлось писать собственными лапами. В прилагающейся обработке для управляемых форм 8.2. лежит пример перевода. Если изменить шаблон с "0123456789ABCDEF" на "0123456789" - перевод будет происходить из десятичной <(^.^)> на  "01234567" - из восьмеричной системы счисления, "01" - двоичной.

Для тех, кому лень качать обработку вот основной код:

&НаКлиенте
Функция ИзХСчислВЧисло(аф,Шаблон) // Шаблон = "0123456789ABCDEF"
    аф = ВРег(аф); // на всякий случай.
   
ДлинаШаблона = СтрДлина(Шаблон);

   
ДлинаСтроки = СтрДлина(аф);
   
ТекСимвол = ДлинаСтроки;
   
Результат = 0;

    Пока
ТекСимвол > 0 Цикл
       
ОбработкаПрерыванияПользователя();
       
ОбрабатываемыйСимвол = Сред(аф, ТекСимвол,1);
       
ПозицияВШаблоне = Найти(Шаблон,ОбрабатываемыйСимвол)-1;
       
Результат = Результат + (ПозицияВШаблоне * pow(ДлинаШаблона,ДлинаСтроки-ТекСимвол));
       
ТекСимвол = ТекСимвол - 1;
    КонецЦикла;

    Возврат(
Результат);
КонецФункции

UPD: Пользователь VUN предложил более компактный метод решения той же проблемы, без использования функции возведения в степень:

&НаКлиенте
Функция ИзХСчислВЧисло(аф,Шаблон)
   
аф = ВРег(аф); // на всякий случай.
   
ДлинаШаблона = СтрДлина(Шаблон);

   
ДлинаСтроки = СтрДлина(аф);
   
Результат = 0;

    Для
ТекСимвол = 1 По ДлинаСтроки Цикл
       
ОбрабатываемыйСимвол = Сред(аф, ТекСимвол,1);
       
ПозицияВШаблоне = Найти(Шаблон,ОбрабатываемыйСимвол)-1;
       
Результат = Результат * ДлинаШаблона + ПозицияВШаблоне;
    КонецЦикла;

    Возврат(
Результат);

КонецФункции

Файлы обработки:

-