OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

Неясно, как работать с массивом битов

Open ArsenShnurkov opened this issue 7 years ago • 3 comments

т.е. классами System.Collections.BitArray и System.BitConverter

Как написать примерно такое:

BitArray bits = new BitArray(42);
for(int i=0; i<bits.Length; i+=2) {
  bits[ i ] = true;
}
foreach(bool bit in bits) {
  Console.WriteLine(bit);
}

Как определить, является ли машина BigEndian или LittleEndian...

ArsenShnurkov avatar May 08 '18 15:05 ArsenShnurkov

Напрямую эти классы не проброшены. Могу предложить воспользоваться стандартными 1С-овскими средствами работы с битами. Не 100% замена, конечно.

Есть еще экспериментальная работа с классами .NET напрямую, через механику COM-объектов. Но я сам в полной мере ей не владею.

МассивБит = Новый COMОбъект("System.Collections.BitArray");

Точное написание в строковом параметре - наизусть не воспроизведу. Строка должна позволять отработать методу Type.GetType()

https://msdn.microsoft.com/ru-ru/library/w3f99sx1(v=vs.110).aspx

EvilBeaver avatar May 09 '18 22:05 EvilBeaver

https://wonderland.v8.1c.ru/blog/pobitovye-operatsii-s-tselymi-chislami/

Прежде всего, это «стандартный» набор операций: ПобитовоеИ(), ПобитовоеИли(), ПобитовоеНе(), ПобитовоеИНе() и ПобитовоеИсключительноеИли(). Аргументы этих функций интерпретируются как 32-битные целые числа без знака. Результатом этих функций также является число, получаемое в результате побитового объединения аргументов по правилам выбранной логической операции.

Также мы добавили две операции сдвига: ПобитовыйСдвигВлево() и ПобитовыйСдвигВправо(). С их помощью вы можете сдвинуть двоичное представление числа на нужное количество битов, а освободившиеся разряды заполнить нулями.

Помимо этого мы реализовали функции, с помощью которых вы можете проверить состояние отдельного бита (ПроверитьБит()), проверить состояние сразу нескольких битов (ПроверитьПоБитовойМаске()), или установить отдельный бит числа в нужное вам значение (УстановитьБит()).

Такая бага уже была и такие функции теперь есть.

https://wonderland.v8.1c.ru/blog/rasshirenie-funktsionalnosti-raboty-s-dvoichnymi-dannymi

Теперь вы можете использовать побитовые логические операции при работе с буферами двоичных данных. В результате этих операций в исходный буфер будет записан результат побитового объединения исходных байтов и байтов в заданном буфере по правилам выбранной логической операции. Мы реализовали следующие операции:

ЗаписатьПобитовоеИ();
ЗаписатьПобитовоеИли();
ЗаписатьПобитовоеИсключительноеИли();
ЗаписатьПобитовоеИНе();
Инвертировать().

А такой баги ещё не было. Я не вижу реализацию второго комплекта функций в коде движка

ArsenShnurkov avatar May 10 '18 09:05 ArsenShnurkov

Да, второго комплекта функций нет. И задачи на них нет. Кто создаст? Кто реализует?

EvilBeaver avatar May 13 '18 19:05 EvilBeaver