在.NET中将int转换为位数组

我怎样才能将int转换为位数组?

如果我例如有一个int值为3我想要一个数组,长度为8,看起来像这样:

0 0 0 0 0 0 1 1 

这些数字中的每一个都在数组中的一个单独的插槽中,大小为8。

要转换int'x'

 int x = 3; 

一种方式,通过操纵int:

 string s = Convert.ToString(x, 2); //Convert to binary in a string int[] bits= s.PadLeft(8, '0') // Add 0's from left .Select(c => int.Parse(c.ToString())) // convert each char to int .ToArray(); // Convert IEnumerable from select to Array 

另外,通过使用BitArray类 –

 BitArray b = new BitArray(new byte[] { x }); int[] bits = b.Cast<bool>().Select(bit => bit ? 1 : 0).ToArray(); 

使用BitArray类。

 int value = 3; BitArray b = new BitArray(new int[] { value }); 

如果你想得到一个数组的位,你可以用一个bool[]数组来使用BitArray.CopyTo方法。

 bool[] bits = new bool[b.Count]; b.CopyTo(bits, 0); 

请注意,这些位将从最低位保存到最高位,所以您可能希望使用Array.Reverse

最后,如果你想为每一位取0和1而不是布尔值(我使用一个byte来存储每一位;比一个int更less浪费):

 byte[] bitValues = bits.Select(bit => (byte)(bit ? 1 : 0)).ToArray(); 

使用Convert.ToString (value, 2)

所以在你的情况

string binValue = Convert.ToString (3, 2);

我刚碰到一个例子,其中…

 int val = 2097152; var arr = Convert.ToString(val, 2).ToArray(); var myVal = arr[21]; 

…没有产生我正在寻找的结果。 在上面的'myVal'中,位置21中存储在数组中的值是'0'。 应该是'1'。 我不知道为什么我收到一个不准确的值,这让我感到困惑,直到我find另一种方式在C#中将INT转换为位数组:

 int val = 2097152; var arr = new BitArray(BitConverter.GetBytes(val)); var myVal = arr[21]; 

这产生了“真”作为“myVal”的布尔值。

我意识到这可能不是获得这个价值的最有效的方法,但是它非常直截了当,简单而且可读。

 int value = 3; var array = Convert.ToString(value, 2).PadLeft(8, '0').ToArray(); 

我将用一行代码实现它,如下所示:

 using System; using System.Collections; namespace stackoverflowQuestions { class Program { static void Main(string[] args) { //get bit Array for number 20 var myBitArray = new BitArray(BitConverter.GetBytes(20)); } } } 

请注意, BitArray每个元素都存储为bool,如下面的快照所示:

在这里输入图像说明

所以下面的代码工作:

 if (myBitArray[0] == false) { //this code block will execute } 

但下面的代码根本不能编译:

 if (myBitArray[0] == 0) { //some code }