Tim*_*hyP 3 .net .net-micro-framework bitarray
是否有针对.NET Micro Framework的BitArray替代方案?我在考虑简单地使用bool [],但是如何将它转换回byte []?
在完整的框架中,考虑"位"是BitArray,以下工作:
byte[] data = new byte[dimensions / 8];
bits.CopyTo(data, 0);
Run Code Online (Sandbox Code Playgroud)
但我似乎无法在微框架中找到BitArray类
复制功能并不是非常困难BitArray.首先,如果您需要少于65位,那么您可以使用long或更小.
设置单个位:
void Set(ref long ba, int bit)
{
ba |= 1L << bit;
}
Run Code Online (Sandbox Code Playgroud)
要清楚一点:
void Clear(ref long ba, int bit)
{
long mask = 1L << bit;
mask = ~mask;
ba &= mask;
}
Run Code Online (Sandbox Code Playgroud)
要查看是否设置了位:
bool IsSet(long ba, int bit)
{
long mask = 1L << bit;
return (ba & mask) != 0;
}
Run Code Online (Sandbox Code Playgroud)
如果你有超过64位,那么你需要创建一个数组(byte[]可能),然后进行除法以确定要修改的字节/位.上面的方法将工作,只要你改long到byte.
例如,如果您有:
byte[] myBytes = new byte[128];
Run Code Online (Sandbox Code Playgroud)
你有1024位.
设置一下:
void Set (int bit)
{
int byte = bit/8;
int bitIndex = bit%8;
myBytes[byte] |= (byte)(1 << bitIndex);
}
Run Code Online (Sandbox Code Playgroud)
其他方法使用相同的数学运算来获取字节和位索引,设置,清除和测试位与long上面的示例相同.