Неясно, как работать с массивом битов
т.е. классами 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...
Напрямую эти классы не проброшены. Могу предложить воспользоваться стандартными 1С-овскими средствами работы с битами. Не 100% замена, конечно.
Есть еще экспериментальная работа с классами .NET напрямую, через механику COM-объектов. Но я сам в полной мере ей не владею.
МассивБит = Новый COMОбъект("System.Collections.BitArray");
Точное написание в строковом параметре - наизусть не воспроизведу. Строка должна позволять отработать методу Type.GetType()
https://msdn.microsoft.com/ru-ru/library/w3f99sx1(v=vs.110).aspx
https://wonderland.v8.1c.ru/blog/pobitovye-operatsii-s-tselymi-chislami/
Прежде всего, это «стандартный» набор операций: ПобитовоеИ(), ПобитовоеИли(), ПобитовоеНе(), ПобитовоеИНе() и ПобитовоеИсключительноеИли(). Аргументы этих функций интерпретируются как 32-битные целые числа без знака. Результатом этих функций также является число, получаемое в результате побитового объединения аргументов по правилам выбранной логической операции.
Также мы добавили две операции сдвига: ПобитовыйСдвигВлево() и ПобитовыйСдвигВправо(). С их помощью вы можете сдвинуть двоичное представление числа на нужное количество битов, а освободившиеся разряды заполнить нулями.
Помимо этого мы реализовали функции, с помощью которых вы можете проверить состояние отдельного бита (ПроверитьБит()), проверить состояние сразу нескольких битов (ПроверитьПоБитовойМаске()), или установить отдельный бит числа в нужное вам значение (УстановитьБит()).
Такая бага уже была и такие функции теперь есть.
https://wonderland.v8.1c.ru/blog/rasshirenie-funktsionalnosti-raboty-s-dvoichnymi-dannymi
Теперь вы можете использовать побитовые логические операции при работе с буферами двоичных данных. В результате этих операций в исходный буфер будет записан результат побитового объединения исходных байтов и байтов в заданном буфере по правилам выбранной логической операции. Мы реализовали следующие операции:
ЗаписатьПобитовоеИ(); ЗаписатьПобитовоеИли(); ЗаписатьПобитовоеИсключительноеИли(); ЗаписатьПобитовоеИНе(); Инвертировать().
А такой баги ещё не было. Я не вижу реализацию второго комплекта функций в коде движка
Да, второго комплекта функций нет. И задачи на них нет. Кто создаст? Кто реализует?