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

21.10.11

Разработка - Универсальные функции

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
СтрокуВЧисло.epf
.epf 6,20Kb
12 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5492    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    46580    dimanich70    83    

165

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6887    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57759    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8659    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22864    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. lazy 321 20.10.11 22:46 Сейчас в теме
Простой алгоритм перевода числа из любой системы счисления в десятичную.

Перейти к публикации

1. VUN 38 20.10.11 22:46 Сейчас в теме
Можно записать это проще, без возведения в степень:
Для ТекСимвол = 1 По ДлинаСтроки Цикл
        ОбрабатываемыйСимвол = Сред(аф, ТекСимвол,1);
        ПозицияВШаблоне = Найти(Шаблон,ОбрабатываемыйСимвол)-1;
        Результат = Результат * ДлинаШаблона + ПозицияВШаблоне;
КонецЦикла;
2. lazy 321 21.10.11 08:19 Сейчас в теме
(1) Благодарю за отклик и предоставленный альтернативный алгоритм. Признаться вообще удивлен, что эта запись кого то заинтересовала. За все время, что я вожусь с 1Ской это первый случай, когда потребовалось что то делать с шестнадцатеричными числами т.е. нужно отметить, что задача в определенном смысле специфична. Основной пост сейчас поправлю, добавив Ваш вариант.
3. ms200999 08.12.11 14:58 Сейчас в теме
Ну, мне недавно внезапно потребовалось переводить Hex в Bin. Случается.
4. mgor 9 14.12.11 21:56 Сейчас в теме
На самом деле очень полезная вещь, которой не хватало в 1С.

Особенно при стыковке с разными Web,Java и прочими Андроидами,
где тот же цвет задается то через Int, то через строки типа "#FF00AA98".
Спасибо автору.
5. Патриот 465 25.04.14 09:53 Сейчас в теме
Чуть было не написал сам, но решил глянуть на Инфостарте и не зря)
Идея с использованием шаблона, позволяющего передавать любые символы, хороша. Но, наверное, стоило бы сразу писать алгоритм, переводящий из любой СЧ в любую другую.. Всё равно спасибо, сэкономил человеко-час. Плюсую.
6. Berrimor 198 18.02.16 13:50 Сейчас в теме
Из любой системы счисления

Значение = "00001CGUMZYCB99J"; // Для примера значение кода алкогольной продукции из акцизной марки в 36-ричной системе счисления
Нотация = 36; // основание, здесь 36

Результат=0;

Длина = СтрДлина(Значение);
Для Х=1 По Длина Цикл
М=1;
Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла;
Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М;
КонецЦикла;
Для отправки сообщения требуется регистрация/авторизация