我想转换从数组中取出的十进制整数并转换为4位二进制并将每个位存储到c#中的数组
static void Main()
{
BinaryInput a = new BinaryInput();
int[] input = { 7, 0, 0, 0, 2, 0, 4, 4, 0 };
int x;
int[] bits = new int[36];
ArrayList Actor = new ArrayList();
for (int i = 0; i < input.Length; i++)
{
x = (int)input[i];
string result = Convert.ToString(x, 2);
bits = result.PadLeft(4, '0').Select(c =>int.Parse(c.ToString())).ToArray();
Actor.Add(bits);
}
}
ArrayList
Actor
由9个数组组成,每个数组由二进制数组成......但我想在单个数组中添加每个二进制位作为单个元素数组或arraylist {0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0}
答案 0 :(得分:3)
你可以写一个方法来获得&#34;比特&#34;像这样的数字
private static IEnumerable<int> ToBitSequence(this int num, int size)
{
while (size > 0)
{
yield return num & 1;
size--;
num >>= 1;
}
}
然后您可以通过以下方式使用它来获得所需的结果。
int[] input = { 7, 0, 0, 0, 2, 0, 4, 4, 0 };
var bits = input.Reverse().SelectMany(i => i.ToBitSequence(4)).Reverse();
Console.WriteLine(string.Join(",", bits));
结果
0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 ,0,1,0,0,0,1,0,0,0,0,0,0
两个Reverse
调用的原因是因为ToBitSequence
将首先返回最低有效位,因此通过以相反顺序提供数字然后反转结果,您将获得最重要的位至少从列表中的第一个数字开始。
这比您当前正在进行的char
,string
和int
之间的所有解析和格式化更为可取。
但是,如果您只是将Actor
更改为List<int>
并执行Actor.AddRange(bits);
也可以。
答案 1 :(得分:0)
使用BitArray
BitArray b = new BitArray(new byte[] { x });
int[] bits = b.Cast<bool>().Select(bit => bit ? 1 : 0).ToArray();
这将为您提供位,然后使用
bits.Take(4).Reverse()
为每个数字首先获得最重要的4位最重要的顺序。