如何将bool []转换为byte []

时间:2012-01-24 12:55:27

标签: c#

我有bool数组:

bool[] b6=new bool[] {true, true, true, true, true, false, true, true,
                      true, false, true, false, true, true, false, false };

如何将其转换为字节数组,以便

  • byte [0] = 0xFB
  • byte [1] = AC

5 个答案:

答案 0 :(得分:10)

我相信你想要这样的东西:

static byte[] ToByteArray(bool[] input)
{
    if (input.Length % 8 != 0)
    {
        throw new ArgumentException("input");
    }
    byte[] ret = new byte[input.Length / 8];
    for (int i = 0; i < input.Length; i += 8)
    {
        int value = 0;
        for (int j = 0; j < 8; j++)
        {
            if (input[i + j])
            {
                value += 1 << (7 - j);
            }
        }
        ret[i / 8] = (byte) value;
    }
    return ret;
}

编辑:在澄清要求之前的原始答案:

你还没有说过要转换的内容。例如,这将起作用:

byte[] converted = Array.ConvertAll(b6, value => value ? (byte) 1 : (byte) 0);

或类似地(但效率稍低)使用LINQ:

byte[] converted = b6.Select(value => value ? (byte) 1 : (byte) 0).ToArray();

答案 1 :(得分:6)

如果要将每组八个布尔值转换为一个字节,可以使用BitArray类:

byte[] data = new byte[2];
new BitArray(b6).CopyTo(data, 0);

数组data现在包含两个值0xDF和0x35。

编辑:

如果你想要结果0xFB和0xAC,你必须首先反转数组中的布尔值:

Array.Reverse(b6, 0, 8);
Array.Reverse(b6, 8, 8);

答案 2 :(得分:2)

bytes = (from bit in b6 select bit ? (byte)1 : (byte)0).ToArray()

答案 3 :(得分:2)

您可以使用Linq执行此操作:

var byteArray = 
b6
.Select(b => (byte)(b ? 1 : 0))
.ToArray();

答案 4 :(得分:0)

byte[] byteArray = Array.ConvertAll(b6, b => b ? (byte)1 : (byte)0);

此处回答:https://stackoverflow.com/a/713105/181002