【问题标题】:How can I convert an int to an array of bool?如何将 int 转换为 bool 数组?
【发布时间】:2011-05-25 18:52:09
【问题描述】:

如何将 int 转换为 bool 数组(表示整数中的位)?例如:

4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }

【问题讨论】:

    标签: c#


    【解决方案1】:

    您可以使用BitArray

    var bools = new BitArray(new int[] { yourInt }).Cast<bool>().ToArray();
    

    【讨论】:

    • new int[yourInt] 应该是new int[]{yourInt}
    • 如果yourInt为255,则不会创建一个长度为8的全为真的数组,甚至不会创建一个长度为32且后八为真的数组,它会创建一个长度为8160的数组,全为false。
    • @Guffa:代码有错误。请参阅@Albin Sunnanbo 评论。如果我们纠正@Albin 的评论,那么数组大小是 32。
    • 不是真正的错误,只是行为上的不同。大多数集合允许您使用new(size),这正是它对int 构造函数所做的事情。那说它也咬了我。
    【解决方案2】:
    Int32 number = 10;
    
    var array = Convert.ToString(number, 2).Select(s => s.Equals('1')).ToArray();
    

    --编辑--

    使用扩展方法:

    public static class Int32Extensions
    {
        public static Boolean[] ToBooleanArray(this Int32 i)
        {
            return Convert.ToString(i, 2 /*for binary*/).Select(s => s.Equals('1')).ToArray();
        }
    }
    

    用法:

    var boolArray = number.ToBooleanArray();
    

    【讨论】:

    • 重要的是要注意这将截断所有前导零。我必须填充我的 bool 数组的前面,直到它的长度为 32。
    【解决方案3】:

    int 应该很好地映射到 BitVector32(或 BitArray

    int i = 4;
    var bv = new BitVector32(i);
    bool x = bv[0], y = bv[1], z = bv[2]; // example access via indexer
    

    但是,我个人只会使用轮班(&gt;&gt; 等)并将其保留为intbool[]很多更大

    【讨论】:

    • BitVector ...你永远不知道框架内的所有类...谢谢:)
    【解决方案4】:

    您可以使用BitArray 轻松地从数字中获取布尔值集合:

    var b = new BitArray(new int[] { 255 });
    

    但是,它将使用值中的所有位,因此上面将为您提供长度为 32 的 BitArray,因为 int 数据类型是 32 位。

    您可以从字节创建BitArray,这将为您提供每个字节的八个布尔值:

    var b = new BitArray(new byte[] { 255 });
    

    您可以通过跳过前导错误来获得仅包含有效位的数组:

    bool[] b = new BitArray(42).Cast<bool>().SkipWhile(x => !x).ToArray();
    

    【讨论】:

      【解决方案5】:

      您可以分两步执行此操作,首先使用 Convert.ToString 将整数转换为二进制(以 2 为基数)字符串表示,然后遍历该字符串以填充 BitArray

      例如:

      int someInt = 7;
      string binaryString = Convert.ToString(someInt, 2); 
      BitArray bitArray = new BitArray(binaryString.Length); 
      for (int i = 0; i < bitArray.Length; i++)
      {
          bitArray[i] = (binaryString[i] == '1');
      }
      

      【讨论】:

      • BitArray 有一个采用整数数组的构造函数。
      【解决方案6】:
          public static bool[] Convert(int[] input, int length)
          {
              var ret = new bool[length];
              var siz = sizeof(int) * 8;
              var pow = 0;
              var cur = 0;
      
              for (var a = 0; a < input.Length && cur < length; ++a)
              {
                  var inp = input[a];
      
                  pow = 1;
      
                  for (var i = 0; i < siz && cur < length; ++i)
                  {
                      ret[cur++] = inp > 0 ? (inp & pow) != 0 : (inp & pow) == 0;
      
                      pow *= 2;
                  }
              }
      
              return ret;
          }
      

      【讨论】:

      • 这个答案可以使用一些叙述。为什么“输入”是一个整数数组?
      • @kccricket 作者提出的主题。 int[] 到 bool[]
      • @nim 作者询问“如何将 int 转换为 bool 数组?”,而不是“如何转换 int 数组 到布尔数组?”。问题中的示例也是单个整数,而不是数组。
      猜你喜欢
      • 2015-06-12
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 2015-10-07
      • 2015-12-01
      • 2015-12-01
      • 2019-05-17
      • 2011-09-09
      相关资源
      最近更新 更多