将十进制整数转换为4位二进制

时间:2016-03-03 18:09:00

标签: c#

我想转换从数组中取出的十进制整数并转换为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}

2 个答案:

答案 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将首先返回最低有效位,因此通过以相反顺序提供数字然后反转结果,您将获得最重要的位至少从列表中的第一个数字开始。

这比您当前正在进行的charstringint之间的所有解析和格式化更为可取。

但是,如果您只是将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位最重要的顺序。