Понадобилось мне генерить рандомные цвета для вывода полигонов на карту одного отечественного сервиса. Подставлять мне их надо было в текст 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ДвоичныеДанныеИзДвоичныхДанных).