Bitarray альтернатива для .NET Micro Framework
-
29-09-2019 - |
Вопрос
Есть ли битиарй альтернатива для Micro Framework .NET? Я думал просто использовать Bool [], но как вы можете вернуть его обратно в байт []?
В полной мере, учитывая «биты» - это битарости, следующие работы:
byte[] data = new byte[dimensions / 8];
bits.CopyTo(data, 0);
Но я не могу найти класс Bitarray в микроформации Micro
Решение
Это не ужасно трудно дублировать функциональность BitArray
. Отказ Во-первых, если вам нужно меньше 65 битов, вы можете сделать это с long
или меньше.
Чтобы установить отдельный бит:
void Set(ref long ba, int bit)
{
ba |= 1L << bit;
}
Чтобы очистить немного:
void Clear(ref long ba, int bit)
{
long mask = 1L << bit;
mask = ~mask;
ba &= mask;
}
Чтобы увидеть, установлен ли немного:
bool IsSet(long ba, int bit)
{
long mask = 1L << bit;
return (ba & mask) != 0;
}
Если у вас есть более 64 бит, то вам нужно будет создать массив (byte[]
, Возможно) и сделать разделение, чтобы определить, какой байт / бит вы хотите изменить. Способы выше будут работать, при условии, что вы измените long
к byte
.
Например, если у вас есть:
byte[] myBytes = new byte[128];
У вас есть 1024 бита.
Установить немного:
void Set (int bit)
{
int byte = bit/8;
int bitIndex = bit%8;
myBytes[byte] |= (byte)(1 << bitIndex);
}
Другие методы используют ту же математику, чтобы получить байт и битовый индекс, а также настройки, очистку и тестирование немного такое же, как и с long
Пример выше.
Другие советы
Вы можете найти реализацию BitArray в стеке 802.15.4. Просто ищите набор для портирования для Bitarray.cs
Я загрузил массив для .NET Microframework:
http://code.tinyclr.com/project/310/bitarray-class/
Надеюсь это поможет.