C# 将8个布尔值转换为1字节的正确方法

C# 将8个布尔值转换为1字节的正确方法,c#,optimization,boolean,byte,C#,Optimization,Boolean,Byte,简单问题:考虑到bool(true,false)与位(1,0)相同,在C#中将八个bool转换为一个字节的正确方法是什么 示例: 真的,真的,真的,真的,真的,真的,真的==11111111==255 真,假,假,假,假,假,假,假==10000000==128 false,false,false,false,false,false==00000000==0 以上是第一部分。我想创建一个扩展方法,如下所示: public static byte[] ToByteArray(this bo

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

示例:

真的,真的,真的,真的,真的,真的,真的==11111111==255

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

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

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

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

结果必须是一个byteArray,它包含的元素比布尔数组少八倍。

您可能正在搜索

对于表示位,在
C.
中有特殊的结构
BitArray
。 因此,您的代码如下所示:

var booleans = new bool[]{true, false, false, false};
var bitArray = new BitArray(booleans); 
稳健的解决方案(以防万一)

以某种方式将它们分成8组(取决于顺序和您想要调整它们的方式-到
LSB
RSB
),然后通过在循环中调用此方法形成一个数组:

byte GetByte(bool[] bits)
{
    byte result = 0;
    for(int i = 0; i < bits.Length; i++)
        if(byte[i])
            result |= 1 << i;
    return result;
}
byte-GetByte(bool[]位)
{
字节结果=0;
for(int i=0;i结果|=1您正在询问如何将8个bool转换为一个字节,但您的示例方法是返回一个字节数组。是的,正如我所说,byteArray是第二部分,首先我需要将8个bool转换为1个bytei这是一个很好的解决方案,但是在指定长度并使用
SetAll(true)
时,请注意错误,因为这将导致-1(表示整数的所有位),而不是给定的长度。那么,如何从中返回字节[]?@Guilherme:
CopyTo()
@Guilherme@LS\u dev,是的,谢谢。我提到过,应该首先为方法准备
字节
,但您可以添加绑定检查并抛出
ArgumentOutOfRangeException
或其他任何东西,如果您愿意,这只是一个将任何内容转换为位是多么容易的示例。