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

本文关键字:字节 方法 布尔值 转换 | 更新日期: 2023-09-27 18:30:52

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

例子:

真,真,真,真,真,真,真

,真== 11111111 == 255

真,假,假,假,假,假,假

,假== 10000000 == 128

假,假,假,假,假,假,

假 == 00000000 == 0

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

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

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

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

你大概在搜索BitArray Constructor (Boolean[])

对于放射位,您在C#中具有特殊的结构BitArray。所以你的代码看起来像这样:

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

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

以某种方式将它们分成 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;
}