2017-10-05 88 views
-1

我有一个USHORT阵列:转换USHORT阵列位阵列

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

我怎样才能将其转换为位阵列。在上面的例子中,长度为5 * 16位数组?提前致谢!

+0

你为什么写'5 * 16'位数组?你不知道'int'被包裹在'Int32'上,而不是'Int16',不是吗? –

+0

对不起,我输错了。源数组是'ushort'。 – user8595258

回答

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()语句,所以你自己的测试。你可能不得不改变顺序,也许会改变每一对中的第二个......我会留下那部分让你解决。此外,如果你只是在你的源USHORT []一个值,你会得到一个错误,以便制定出数学整理了这一点太..

上述结果是:

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 
+0

对不起,我打错了。源数组ushort – user8595258

+0

因此ushort是16位。 BitArray采用int(32位)。你需要把这两个插件混合在一起。将您的目标设置为第二个ushort的值,并将第一个左边的16位逐位进行位平移或将它们一起按位移动。如果你有四个,你会有两个整数,五个你会有三个整数(仍然按位向左移动五分之一,然后按照我所描述的那样传递整数) –

+0

感谢你的支持努力! – user8595258

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(); 
      }