如何将int转换为bool数组(表示整数中的位)?例如:
4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }
答案 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
但是,我个人只是使用轮班(>>
等)并将其保留为int
。 bool[]
多更大
答案 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');
}