正确的方法将8个bool转换为1个字节

时间:2013-09-10 15:04:25

标签: c# optimization boolean byte

简单的问题:考虑到bool(true,false)与位(1,0)相同,将8个bool转换为C#中的字节的正确方法是什么?

示例:

true,true,true,true,true,true,true,true == 11111111 == 255

true,false,false,false,false,false,false,false == 10000000 == 128

false,false,false,false,false,false,false,false == 00000000 == 0

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

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

结果必须是byteArray,其元素比bool数组少八倍。

2 个答案:

答案 0 :(得分:11)

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

为表示位,您在BitArray中有特殊结构C#。 所以你的代码看起来像这样:

var booleans = new bool[]{true, false, false, false};
var bitArray = new BitArray(booleans); 

答案 1 :(得分:1)

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

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

byte GetByte(bool[] bytes)
{
    byte result = 0;
    for(int i = 0; i < bytes.Length; i++)
        if(byte[i])
            result |= 1 << i;
    return result;
}