繁体   English   中英

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

[英]How to convert bool [] into byte []

我有bool数组:

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

我怎样才能将其转换为字节数组

  • 字节[0] = 0xFB的才能
  • 字节[1] = AC
  • 等等

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

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();

如果要将每组八个布尔值转换为一个字节,可以使用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);
bytes = (from bit in b6 select bit ? (byte)1 : (byte)0).ToArray()

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM