如何将int转换为bool数组?

时间:2010-12-15 08:34:28

标签: c#

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

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

6 个答案:

答案 0 :(得分:12)

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

但是,我个人只是使​​用轮班(>>等)并将其保留为intbool[] 更大

答案 1 :(得分:8)

您可以使用BitArray

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

答案 2 :(得分:7)

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

答案 3 :(得分: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;

            if (inp > 0)
            {
                for (var i = 0; i < siz && cur < length; ++i)
                {
                    ret[cur++] = (inp & pow) == pow;

                    pow *= 2;
                }
            }
            else
            {
                for (var i = 0; i < siz && cur < length; ++i)
                {
                    ret[cur++] = (inp & pow) != pow;

                    pow *= 2;
                }
            }
        }

        return ret;
    }

答案 4 :(得分:0)

您可以使用BitArray轻松地从一个数字中获取一组布尔值:

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

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

您可以从字节创建BitArray,从每个字节中可以得到8个布尔值:

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

你可以通过跳过主要的错误来获得一个只有重要位的数组:

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

答案 5 :(得分:0)

您可以将此操作分为两步,首先使用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');
}