【问题标题】:How to convert bool [] into byte []如何将 bool [] 转换为 byte []
【发布时间】:2012-02-17 17:15:24
【问题描述】:

我有布尔数组:

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

我怎样才能把它转换成一个字节数组,这样

  • 字节[0]=0xFB
  • 字节[1]=AC

【问题讨论】:

标签: c#


【解决方案1】:

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

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

【讨论】:

  • 不知道Array.ConvertAll。以为我必须先做一个ToList(),然后才能使用ConvertAll,所以+1 :)
  • 我想将结果位 1 到位 8。但是此代码计算结果位 8 到位 1。
  • @HimanshuBajpai:如果您一开始就给出了明确的要求,我会满足的……但是更改上面的代码应该很容易。 (提示:更改行 value += 1 &lt;&lt; j; 以移动不同的量...)
  • @HimanshuBajpai:我现在已经编辑了代码,主要是为了将来有人会回答这个问题。但是,下次您提出问题时,请从头开始提供更多详细信息。阅读tinyurl.com/so-hints 以获取有关提出问题的建议。
【解决方案2】:

如果要将每组八个布尔值转换为一个字节,可以使用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);

【讨论】:

    【解决方案3】:

    您可以使用 Linq 做到这一点:

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

    【讨论】:

      【解决方案4】:
      byte[] byteArray = Array.ConvertAll(b6, b => b ? (byte)1 : (byte)0);
      

      之前在这里回答过:https://stackoverflow.com/a/713105/181002

      【讨论】:

        【解决方案5】:
        bytes = (from bit in b6 select bit ? (byte)1 : (byte)0).ToArray()
        

        【讨论】:

          猜你喜欢
          • 2010-10-17
          • 2023-03-03
          • 1970-01-01
          • 1970-01-01
          • 2011-06-08
          • 1970-01-01
          • 1970-01-01
          • 2012-02-05
          • 1970-01-01
          相关资源
          最近更新 更多