C# 如何将int转换为bool数组?

C# 如何将int转换为bool数组?,c#,C#,如何将int转换为bool数组(表示整数中的位)?例如: 4 = { true, false, false } 7 = { true, true, true } 255 = { true, true, true, true, true, true, true, true } int someInt = 7; string binaryString = Convert.ToString(someInt, 2); BitArray bitArray = new BitArray(binarySt

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

4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }
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');
}
您可以使用

var bools=new位数组(new int[]{yourInt}).Cast().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();

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


然而,就我个人而言,我只会使用移位(
>
等),并将其保持为
int
bool[]
更大

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

var b = new BitArray(new int[] { 255 });
但是,它将使用值中的所有位,因此上面将获得长度为32的
位数组
,因为
int
数据类型为32位

您可以从字节创建一个
位数组
,这将从每个字节获得八个布尔值:

var b = new BitArray(new byte[] { 255 });
通过跳过前导的FALSE,可以获得仅包含有效位的数组:

bool[] b = new BitArray(42).Cast<bool>().SkipWhile(x => !x).ToArray();
bool[]b=新的位数组(42).Cast().SkipWhile(x=>!x).ToArray();

您可以通过两个步骤完成此操作,首先使用将整数转换为二进制(基数2)字符串表示形式,然后在该字符串上迭代以填充字符串

例如:

4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }
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');
}
int-someInt=7;
string binaryString=Convert.ToString(someInt,2);
BitArray BitArray=新的BitArray(binaryString.Length);
for(int i=0;i
公共静态bool[]转换(int[]输入,int长度)
{
var ret=新布尔[长度];
var siz=sizeof(int)*8;
var-pow=0;
var-cur=0;
对于(变量a=0;a0?(inp&pow)!=0:(inp&pow)==0;
功率*=2;
}
}
返回ret;
}

new int[yourInt]
应该是
new int[]{yourInt}
如果
yourInt
是255,它将不会创建一个长度为8且为true的数组,甚至不会创建长度为32且最后8个为true的数组,它将创建一个长度为8160的数组,其中充满了false。@Guffa:代码中有一个错误。见@Albin Sunnanbo评论。如果我们纠正@Albin的评论,那么数组大小是32。这不是一个真正的bug,只是行为上的差异。大多数集合允许您使用
new(size)
,这正是它使用
int
构造函数所做的。也就是说它也咬了我。。。您永远不知道框架中的所有类。。。谢谢:)请注意,这将截断所有前导零。我必须填充布尔数组的前面,直到它的长度为32。
BitArray
有一个构造函数,它接受一个整数数组。这个答案可能需要一些叙述。“为什么‘输入’是一个整数数组?”该话题的作者问道。int[]to bool[]@nim作者问的是“如何将int转换为bool数组?”,而不是“如何将int数组转换为bool数组?”。问题中的示例也是单整数,而不是数组。
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');
}
    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;
    }