Перевод чисел в шестнадцатеричную систему на примере генератора случайных цветов

10.01.19

Разработка - Механизмы платформы 1С

Демонстрация новой возможности платформы (8.3.13.1513) на практическом примере.

Понадобилось мне генерить рандомные цвета для вывода полигонов на карту одного отечественного сервиса. Подставлять мне их надо было в текст JS-скрипта и они должны были быть в HEX-формате (RRGGBB). Памятуя о колхозных процедурах преобразования в шестнадцатеричную систему в 1С я понадеялся, что в новых релизах платформы что-нибудь могло появиться на эту тему и затаив дыхание написал "HEХ" в поиске по справке...

ПолучитьHexСтрокуИзБуфераДвоичныхДанных(<Буфер>)
Параметры:
<Буфер> (обязательный)
Тип: БуферДвоичныхДанных.
Буфер двоичных данных.

Возвращаемое значение:
Тип: Строка.

Описание:
Преобразует буфер двоичных данных в строку формата Base 16 (Hex).
 

Возник вопрос, что за  буфер такой и можно ли в него запихнуть нужное мне значение:

БуферДвоичныхДанных

Описание:
Коллекция байтов фиксированного размера с возможностью произвольного доступа и изменения по месту.
 

Вроде подходит, надо попробовать:

Генератор = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());
ЦветЧислом = Генератор.СлучайноеЧисло(0, 16777215);
Буфер = Новый БуферДвоичныхДанных(4, ПорядокБайтов.LittleEndian);
Буфер.ЗаписатьЦелое32(0, ЦветЧислом);
Цвет = Лев(ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер), 6);

Инициализируем ГСЧ максимально уникальным значением. Пробовал сначала просто ТекущаяДата(), но в одну секунду процедура успевала выполниться много раз и получался один и тот же цвет, поэтому перешёл на миллисекунды.

Генерим число в диапазоне от 0x0 до 0xFFFFFF.

Создаём буфер. Нам нужно три байта, но поскольку нет метода записи в буфер чисел из трёх байтов :) и есть метод записи в буфер числа из 4х байтов, поставил 4 байта.

Записываем в буфер наше случайное число и получаем значение буфера в виде HEX-строки. Последний байт нам не нужен, поэтому берём только первые 3.

Вот такой относительно простой способ преобразования в HEX у нас появился. Советую почитать про эту группу методов, они ещё много чего полезного умеют (например, Base64-кодирование двоичных данных: ПолучитьBase64ДвоичныеДанныеИзДвоичныхДанных).

HEX

См. также

Сервисы интеграции без Шины и интеграции

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    2541    dsdred    16    

57

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    5836    dsdred    53    

82

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    5820    YA_418728146    25    

67

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6936    dsdred    36    

113

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    19017    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12716    human_new    27    

76

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    9356    YA_418728146    6    

143

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6516    sebekerga    54    

95
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AnderWonder 27 10.01.19 17:00 Сейчас в теме
Вообще-то эта функция уже в 8.3.10 появилась.
PLAstic; +1
2. PLAstic 295 10.01.19 17:01 Сейчас в теме
(1) Версию указал справочно, где точно есть. Спасибо за уточнение.
+
3. ltfriend 961 10.01.19 21:55 Сейчас в теме
Инициализируем ГСЧ максимально уникальным значением. Пробовал сначала просто ТекущаяДата(), но в одну секунду процедура успевала выполниться много раз и получался один и тот же цвет, поэтому перешёл на миллисекунды.

Потому что инициализацию ГСЧ нужно вынести из цикла и сделать это один раз. Ну или, если это функция, то инициализировать вне функции из передавать в функцию в качестве параметра.
PLAstic; +1
4. PLAstic 295 11.01.19 09:08 Сейчас в теме
(3) Это очевидно. Но из-за кривой логики, в которую я встраивал решение, пришлось бы таскать потом ГСЧ операндом к трём функциям. Поэтому так.
+
Оставьте свое сообщение