在.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 }