C bitarray to byte

Is there any predefined function available to convert a byte into BitArray ?

One way would be to inspect every bit of the byte value and then perform bitwise operation. I was wondering if there is any way which is more straightforward than this.

3 Answers 3

Yes, using the appropriate BitArray() constructor as described here:

You can call it with new BitArray(new byte[] < yourBite >) to create an array of one byte.

if you have a byte number or even an integer, etc.

Note: you need a reference to System.Linq

Solution is simple, just two instructions (which are marked in following code), simply convert byte to binary using Convert.ToString(btindx,2) , zero pad the resultant string to 8 bits (or lengths 8), strBin.PadLeft(8,’0′); and concatenate all binary strings to form a bit stream of your byte array, If you like, you can also form an array of strings to separate each byte’s binary representation.

Not the answer you’re looking for? Browse other questions tagged c# byte bitarray or ask your own question.

Linked

Related

Hot Network Questions

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa 4.0 with attribution required. rev 2020.1.10.35756

Определение

Управляет компактным массивом двоичных значений, представленных логическими значениями, где значение true соответствует включенному биту (1), а значение false соответствует отключенному биту (0). Manages a compact array of bit values, which are represented as Booleans, where true indicates that the bit is on (1) and false indicates the bit is off (0).

Примеры

В следующем примере кода показано, как создать и инициализировать BitArray и распечатать его значения. The following code example shows how to create and initialize a BitArray and how to print out its values.

Комментарии

Класс BitArray является классом коллекции, в котором емкость всегда совпадает с числом. The BitArray class is a collection class in which the capacity is always the same as the count. Элементы добавляются в BitArray путем увеличения свойства Length; элементы удаляются путем уменьшения свойства Length. Elements are added to a BitArray by increasing the Length property; elements are deleted by decreasing the Length property. Размер BitArray управляется клиентом; индексирование после конца BitArray вызывает ArgumentException. Класс BitArray предоставляет методы, которые не найдены в других коллекциях, включая те, которые позволяют одновременно изменять несколько элементов с помощью фильтра, например And, Or, Xor, Not и SetAll. The size of a BitArray is controlled by the client; indexing past the end of the BitArray throws an ArgumentException.The BitArray class provides methods that are not found in other collections, including those that allow multiple elements to be modified at once using a filter, such as And, Or, Xor , Not, and SetAll.

Класс BitVector32 представляет собой структуру, которая предоставляет те же функциональные возможности, что и BitArray, но с более высокой производительностью. The BitVector32 class is a structure that provides the same functionality as BitArray, but with faster performance. BitVector32 работает быстрее, так как это тип значения и, таким образом, выделяется в стеке, тогда как BitArray является ссылочным типом и, следовательно, выделяется в куче. BitVector32 is faster because it is a value type and therefore allocated on the stack, whereas BitArray is a reference type and, therefore, allocated on the heap.

Читайте также:  Cannot find please reinstall this application

System.Collections.Specialized.BitVector32 может хранить ровно 32 бит, тогда как BitArray может хранить переменное число бит. System.Collections.Specialized.BitVector32 can store exactly 32 bits, whereas BitArray can store a variable number of bits. BitVector32 сохраняет как битовые флаги, так и небольшие целые числа, тем самым делая его идеальным для данных, которые не предоставляются пользователю. BitVector32 stores both bit flags and small integers, thereby making it ideal for data that is not exposed to the user. Однако если число требуемых битовых флагов неизвестно, аргумент имеет значение variable или больше 32, используйте вместо него BitArray. However, if the number of required bit flags is unknown, is variable, or is greater than 32, use BitArray instead.

Доступ к элементам в этой коллекции можно получить с помощью целочисленного индекса. Elements in this collection can be accessed using an integer index. Индексы в этой коллекции отсчитываются от нуля. Indexes in this collection are zero-based.

Конструкторы

Инициализирует новый экземпляр класса BitArray, содержащий двоичные значения, скопированные из указанного массива BitArray. Initializes a new instance of the BitArray class that contains bit values copied from the specified BitArray.

Инициализирует новый экземпляр класса BitArray, который содержит двоичные значения, скопированные из заданного массива логических значений. Initializes a new instance of the BitArray class that contains bit values copied from the specified array of Booleans.

Инициализирует новый экземпляр класса BitArray, который содержит двоичные значения, скопированные из заданного массива байтов. Initializes a new instance of the BitArray class that contains bit values copied from the specified array of bytes.

Инициализирует новый экземпляр класса BitArray, который может содержать указанное количество битов с первоначально заданным значением false . Initializes a new instance of the BitArray >false .

Инициализирует новый экземпляр класса BitArray, который может содержать указанное количество двоичных значений, для которых установлены заданные начальные значения. Initializes a new instance of the BitArray class that can hold the specified number of bit values, which are initially set to the specified value.

Инициализирует новый экземпляр класса BitArray, который содержит двоичные значения, скопированные из указанного массива 32-битных целых чисел. Initializes a new instance of the BitArray class that contains bit values copied from the specified array of 32-bit integers.

Свойства

Получает число элементов, содержащихся в интерфейсе BitArray. Gets the number of elements contained in the BitArray.

Получает значение, указывающее, является ли объект BitArray доступным только для чтения. Gets a value indicating whether the BitArray is read-only.

Возвращает значение, показывающее, является ли доступ к коллекции BitArray синхронизированным (потокобезопасным). Gets a value indicating whether access to the BitArray is synchronized (thread safe).

Получает или задает значение в указанной позиции в массиве BitArray. Gets or sets the value of the bit at a specific position in the BitArray.

Получает или задает число элементов в массиве BitArray. Gets or sets the number of elements in the BitArray.

Получает объект, с помощью которого можно синхронизировать доступ к коллекции BitArray. Gets an object that can be used to synchronize access to the BitArray.

Методы

Выполняет битовую операцию И между элементами текущего объекта BitArray с соответствующими элементами указанного массива. Performs the bitwise AND operation between the elements of the current BitArray object and the corresponding elements in the specified array. Текущий BitArray объект будет изменен для хранения результата битовой операции И. The current BitArray object will be modified to store the result of the bitwise AND operation.

Читайте также:  Регулятор для батарей отопления

Создает неполную копию BitArray. Creates a shallow copy of the BitArray.

Копирует целый массив BitArray в совместимый одномерный массив Array, начиная с заданного индекса целевого массива. Copies the entire BitArray to a compatible one-dimensional Array, starting at the specified index of the target array.

Определяет, равен ли указанный объект текущему объекту. Determines whether the specified object is equal to the current object.

(Унаследовано от Object)

Get(Int32)

Получает значение бита в указанной позиции в массиве BitArray. Gets the value of the bit at a specific position in the BitArray.

Возвращает перечислитель, осуществляющий перебор элементов списка BitArray. Returns an enumerator that iterates through the BitArray.

Служит в качестве хэш-функции по умолчанию. Serves as the default hash function.

(Унаследовано от Object)

GetType()

Возвращает объект Type для текущего экземпляра. Gets the Type of the current instance.

(Унаследовано от Object)

LeftShift(Int32) MemberwiseClone()

Создает неполную копию текущего объекта Object. Creates a shallow copy of the current Object.

(Унаследовано от Object)

Not()

Обращает все двоичные значения в текущем массиве BitArray таким образом, чтобы каждому элементу со значением true было присвоено значение false , а каждому элементу со значением false было присвоено значение true . Inverts all the bit values in the current BitArray, so that elements set to true are changed to false , and elements set to false are changed to true .

Выполняет побитовую операцию ИЛИ для элементов текущего объекта BitArray и соответствующих элементов указанного массива. Performs the bitwise OR operation between the elements of the current BitArray object and the corresponding elements in the specified array. В текущем объекте BitArray будет сохранен результат побитовой операции ИЛИ. The current BitArray object will be modified to store the result of the bitwise OR operation.

Устанавливает заданное значение бита в указанной позиции в массиве BitArray. Sets the bit at a specific position in the BitArray to the specified value.

Присваивает указанное значение всем битам в массиве BitArray. Sets all bits in the BitArray to the specified value.

Возвращает строку, представляющую текущий объект. Returns a string that represents the current object.

(Унаследовано от Object)

Xor(BitArray)

Выполняет побитовую операцию исключающего ИЛИ применительно к элементам текущего объекта BitArray и соответствующим элементам указанного массива. Performs the bitwise exclusive OR operation between the elements of the current BitArray object against the corresponding elements in the specified array. В текущем BitArray объекте будет сохранен результат побитовой операции исключающего ИЛИ. The current BitArray object will be modified to store the result of the bitwise exclusive OR operation.

Явные реализации интерфейса

Копирует элементы коллекции BitArray в Array, начиная с указанного индекса Array. Copies the elements of the BitArray to an Array, starting at the specified Array index.

Возвращает количество элементов в BitArray. Gets the number of elements in the BitArray.

Получает значение, определяющее, является ли доступ к коллекции BitArray синхронизированным (потокобезопасным). Gets a value that indicates whether access to the BitArray is synchronized (thread safe).

Получает объект, с помощью которого можно синхронизировать доступ к коллекции BitArray. Gets an object that can be used to synchronize access to the BitArray.

Методы расширения

Приводит элементы объекта IEnumerable к заданному типу. Casts the elements of an IEnumerable to the specified type.

Читайте также:  База данных библиотека access пример

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу. Filters the elements of an IEnumerable based on a specified type.

Позволяет осуществлять параллельный запрос. Enables parallelization of a query.

Преобразовывает коллекцию IEnumerable в объект IQueryable. Converts an IEnumerable to an IQueryable.

Применяется к

Потокобезопасность

Открытые статические ( Shared в Visual Basic) члены этого типа являются потокобезопасными. Public static ( Shared in Visual Basic) members of this type are thread safe. Потокобезопасность членов экземпляров не гарантируется. Any instance members are not guaranteed to be thread safe.

Эта реализация не предоставляет синхронизированную (потокобезопасную) оболочку для BitArray. This implementation does not provide a synchronized (thread safe) wrapper for a BitArray.

Перечисление коллекции не является потокобезопасной процедурой. Enumerating through a collection is intrinsically not a thread-safe procedure. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками. To guarantee thread safety during enumeration, you can either lock the collection during the entire enumeration or catch the exceptions resulting from changes made by other threads.

I have a BitArray with the length of 8, and I need a function to convert it to a byte . How to do it?

Specifically, I need a correct function of ConvertToByte :

10 Answers 10

This should work:

A bit late post, but this works for me:

A poor man’s solution:

This should do the trick. However the previous answer is quite likely the better option.

In the example you posted the resulting byte will be 0x80. In other words the first value in the BitArray coresponds to the first bit in the returned byte.

That’s should be the ultimate one. Works with any length of array.

In addition to @JonSkeet answer you can use Generic Method as blow:

Unfortunately, the BitArray class is partially implemented in .Net Core class (UWP). For example BitArray class is unable to call the CopyTo() and Count() methods. I wrote this extension to fill the gap:

The method decodes the BitArray to a byte array using LSB (Less Significant Byte) logic. This is the same logic used by the BitArray class. Calling the method with the MSB parameter set on true will produce a MSB decoded byte sequence. In this case, remember that you maybe also need to reverse the final output byte collection.

Little endian byte array converter : First bit (indexed with "0") in the BitArray assumed to represents least significant bit (rightmost bit in the bit-octet) which interpreted as "zero" or "one" as binary.

A sample from my codes:

Not the answer you’re looking for? Browse other questions tagged c# .net binary bitarray base-class-library or ask your own question.

Linked

Related

Hot Network Questions

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa 4.0 with attribution required. rev 2020.1.10.35756

Ссылка на основную публикацию
Adblock
detector