Альтернатива BitArray для .NET Micro Framework - PullRequest
3 голосов
/ 05 ноября 2010

Есть ли альтернатива BitArray для .NET Micro Framework? Я думал о простом использовании bool [], но как вы можете конвертировать его обратно? в байт []?

В полной структуре, учитывая, что "биты" - это BitArray, работает следующее:

byte[] data = new byte[dimensions / 8];
bits.CopyTo(data, 0);

Но я не могу найти класс BitArray в микро фреймворке

Ответы [ 3 ]

5 голосов
/ 05 ноября 2010

Не очень сложно дублировать функциональность 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 выше.

2 голосов
/ 16 декабря 2011

Реализацию BitArray можно найти в стеке 802.15.4. Просто найдите в Porting Kit BitArray.cs

0 голосов
/ 23 мая 2011

Я загрузил массив для микрорамок .net:

http://code.tinyclr.com/project/310/bitarray-class/

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

...