C# 如何将bool[]转换为字节[]

C# 如何将bool[]转换为字节[],c#,C#,我有布尔数组: 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) {

我有布尔数组:

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;
      }
      
      或者类似地(但效率稍低)使用LINQ:

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

      在此之前回答:

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

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

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

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

      什么规则控制转换的副本?您希望得到多少字节的结果?应将
      true
      转换为什么?和
      false
      ?尝试右上角的搜索,如果没有找到任何解决方案,则发布问题。有符号或无符号字节?不知道
      数组。ConvertAll
      。我想我必须先做一个
      ToList()
      ,然后才能使用
      ConvertAll
      ,所以+1:)我想得到第1位到第8位的结果。但这段代码计算结果第8位到第1位。@HimanshuBajpai:如果你一开始就给出了明确的要求,我会满足它们。。。但是修改上面的代码应该很容易。(提示:更改行
      value+=1@HimanshuBajpai:我现在编辑了代码,主要是为了将来讨论这个问题的人。但是,下次你提问时,请从一开始就提供更多详细信息。请阅读有关提问的建议。
      
      var byteArray = 
      b6
      .Select(b => (byte)(b ? 1 : 0))
      .ToArray();
      
      byte[] data = new byte[2];
      new BitArray(b6).CopyTo(data, 0);
      
      Array.Reverse(b6, 0, 8);
      Array.Reverse(b6, 8, 8);