适用于.NET Micro Framework的BitArray替代方案

时间:2010-11-05 14:53:36

标签: .net .net-micro-framework bitarray

是否有针对.NET Micro Framework的BitArray替代方案? 我在考虑简单地使用bool [],但是你怎么能把它转换回去 变成一个字节[]?

在完整框架中,考虑“bits”是BitArray,以下工作原理:

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

但我似乎无法在微框架中找到BitArray类

3 个答案:

答案 0 :(得分:5)

复制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示例相同。

答案 1 :(得分:2)

您可以在802.15.4堆栈中找到BitArray实现。只需在Porting Kit中搜索BitArray.cs

答案 2 :(得分:0)

我为.net微框架上传了一个数组:

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

希望这有帮助。