Вопрос

Есть ли битиарй альтернатива для 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/

Надеюсь это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top