C# 如何将int转换为bool数组?
如何将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
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;
}