将ushort数组转换为位数组

时间:2017-10-05 05:04:17

标签: c# bit-manipulation

我有一个ushort数组:

ushort[] testArray = new ushort[]{1, 2, 3, 4, 5};

如何将其转换为位数组。在上面的例子中,5 * 16位数组的长度是多少?提前谢谢!

2 个答案:

答案 0 :(得分:1)

非常简单的谷歌搜索提供了这个BitArray Class

实施例

using System.Collections;

int[]  myInts  = new int[5] { 6, 7, 8, 9, 10 };
BitArray myBA5 = new BitArray( myInts );

<强>更新

所以我对这个问题感兴趣并决定完成一个有效的解决方案。这就是我处理短裤的方法。但有一点是我假设这些位仍然会被翻译,因为你不是想重新插入(??)而只想循环原始位?

var shorts = new ushort[] { 5, 1 };
var numberOfInts = (int)Math.Ceiling((decimal)shorts.Length / 2);
var theInts = new int[numberOfInts];

var shortsPos = 0;
for (int i = 0; i < numberOfInts; i++)
{   
    theInts[i] = shorts[shortsPos + 1];
    theInts[i] = theInts[i] | ((int)shorts[shortsPos] << 16);
    shortsPos =+ 2;
    //theInts[i].Dump();
}

var bitArr = new BitArray(theInts);
foreach (var bit in bitArr)
{
    //bit.Dump();
}

我在LinqPad中嘲笑了这个.Dump()语句所以你是否拥有测试的东西。您可能需要切换订单,并且可能会在每对中移动第二个......我会留下那部分供您解决。此外,如果您在源代码中只有一个值,那么您将收到错误,因此请计算出数学以对其进行排序。

以上结果是:

True
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False
True
False
True
False
False
False
False
False
False
False
False
False
False
False
False
False

答案 1 :(得分:0)

            int[] testArray = new int[] { 1, 2, 3, 4, 5 };
            Dictionary<int, int[]> convertData = new Dictionary<int, int[]>();

            foreach (int x in testArray)
            {
                System.Collections.BitArray b = new System.Collections.BitArray(Convert.ToByte(x));
                convertData[x] = b.Cast<bool>().Select(bit => bit ? 1 : 0).ToArray();
            }