2

简单问题:考虑到一个bool (true, false) 和一个bit (1, 0) 是一样的,那么在C# 中将8 个bool 转换成一个字节的正确方法是什么?

例子:

真实,真实,真实,真实,真实,真实,真实,真实 == 11111111 == 255

真,假,假,假,假,假,假,假 == 10000000 == 128

假的,假的,假的,假的,假的,假的,假的,假的 == 00000000 == 0

以上是第一部分。我想创建一个扩展方法,如下所示:

    public static byte[] ToByteArray(this bool[] bitArray)
    {
          // stuff here
          return byteArray;    
    }

结果必须是包含比 bool 数组少八倍的元素的 byteArray。

4

2 回答 2

13

您可能正在搜索BitArray Constructor (Boolean[])

对于 rapresenting 位,您BitArrayC#. 所以你的代码看起来像这样:

var booleans = new bool[]{true, false, false, false};
var bitArray = new BitArray(booleans); 
于 2013-09-10T15:06:44.677 回答
1

强大的解决方案(以防万一)。

以某种方式将它们分成 8 组(取决于顺序以及您希望如何调整它们 - 到LSBRSB),然后通过在循环中调用此方法形成一个数组:

byte GetByte(bool[] bits)
{
    byte result = 0;
    for(int i = 0; i < bits.Length; i++)
        if(byte[i])
            result |= 1 << i;
    return result;
}
于 2013-09-10T15:26:10.877 回答