如何将int转换为bool数组?
如何将int转换为bool数组(表示整数中的位)? 例如:
4 = { true, false, false } 7 = { true, true, true } 255 = { true, true, true, true, true, true, true, true }
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();
一个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
但是,我个人只是使用shift( >>
etc)并将其保存为int
。 bool[]
会更大
您可以使用BitArray 。
var bools = new BitArray(new int[] { yourInt }).Cast().ToArray();
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; }
您可以使用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().SkipWhile(x => !x).ToArray();
您可以通过两步过程完成此操作,首先使用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'); }