Объединить заданное количество байтов, начиная с заданной позиции с байтами из заданного буфера с использованием побитового И. Если количество байтов не указано, то объединяются все байты до конца буфера.
Синтаксис
ЗаписатьПобитовоеИ(<Позиция>, <Буфер>, <Количество>)Полное описание, параметры и ограничения
БуферДвоичныхДанных.ЗаписатьПобитовоеИ (BinaryDataBuffer.WriteBitwiseAnd)
БуферДвоичныхДанных (BinaryDataBuffer)
ЗаписатьПобитовоеИ (WriteBitwiseAnd)
Доступен, начиная с версии 8.3.10.
Синтаксис:
ЗаписатьПобитовоеИ(<Позиция>, <Буфер>, <Количество>)
Параметры:
<Позиция> (обязательный)
Тип: Число.
Начальная позиция в буфере.
<Буфер> (обязательный)
Тип: БуферДвоичныхДанных.
Буфер, с которым выполняется объединение.
<Количество> (необязательный)
Тип: Число.
Количество байтов, которые требуется объединить.
Значение по умолчанию: Неопределено.
Описание:
Объединить заданное количество байтов, начиная с заданной позиции с байтами из заданного буфера с использованием побитового И. Если количество байтов не указано, то объединяются все байты до конца буфера.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.3.10.
Методическая информация
Практические примеры
Изменить отдельные флаги одного байта
Побитовые операции изменяют выбранные биты, а не арифметическое значение обычным сложением. Учимся читать маски на одном байте.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Можно выполнить на сервере. Каждая операция применяется к буферу длиной один байт.
Первый байт 202 в двоичном виде 11001010; маска 15 — 00001111.
Флаги = Новый БуферДвоичныхДанных(1);
Флаги.Установить(0, 202);
Маска = Новый БуферДвоичныхДанных(1);
Маска.Установить(0, 15);
Флаги.ЗаписатьПобитовоеИ(0, Маска);
Сообщить(Флаги.Получить(0));
Маска.Установить(0, 1);
Флаги.ЗаписатьПобитовоеИли(0, Маска);
Сообщить(Флаги.Получить(0));
Маска.Установить(0, 8);
Флаги.ЗаписатьПобитовоеИНе(0, Маска);
Сообщить(Флаги.Получить(0));
Маска.Установить(0, 3);
Флаги.ЗаписатьПобитовоеИсключительноеИли(0, Маска);
Сообщить(Флаги.Получить(0));
Флаги.Инвертировать(0, 1);
Сообщить(Флаги.Получить(0));Разбор по шагам
И с маской 15 оставляет только младшие четыре бита: 00001010.
Или с 1 устанавливает младший бит: 00001011.
ИНе с 8 очищает бит 00001000, остаётся 00000011.
ИсключительноеИли с 3 переключает оба оставшихся бита, а Инвертировать меняет все нули на единицы.
Как проверить результат
Последовательность вывода: 10, 11, 3, 0, 255.
Повторная Инвертировать(0, 1) вернёт 0; двойная инверсия восстанавливает исходное состояние перед первой инверсией.
Ожидаемый результат
Разные операции над флагами показаны на точных числовых результатах.
На что обратить внимание
Операции меняют принимающий буфер; создавайте копию, если исходный байт нужно сохранить.
Маска ИНе очищает указанные биты, ИсключительноеИли переключает их; эти операции не взаимозаменяемы.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.