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

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    34620    TitanLuchs    108    

150

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    18948    bayselonarrend    127    

68

Механизмы платформы 1С Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    24323    user2122906    10    

66

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    42644    user2122906    12    

63

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

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    35500    dsdred    106    

152

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

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    30956    bayselonarrend    22    

178

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

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

13.03.2024    16618    dsdred    22    

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

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