拆分8位字节

时间:2010-10-19 09:45:49

标签: c# bytearray byte

所以说我有一个长度为16的字节数组,每个8位表示我的数据,一个8位长的数组,每4位(所以每个字节2个)代表我的数据。

如果我想循环使用这些并获取值,那么最简单的方法是什么?

我的不良尝试将是这样的,但这似乎并没有像我期望的那样起作用。

for(int i = 0; i < bigByteArray.Length; i++) 
{
    byte BigByteInfo = bigByteArray[i];
    byte SmallByteInfo;
    if(i % 2 == 0)
    {
        SmallByteInfo = smallByteArray[i / 2] % 16;
    }
    else
    {
        SmallByteInfo = smallByteArray[i / 2] / 16;
    }

    //Use of data Here.
}

2 个答案:

答案 0 :(得分:1)

如果我理解正确(bigByteArray长16,smallByteArray长8,打包):

for(int i = 0; i < bigByteArray.Length; i++)
{
    bigByteArray[i] = (byte)((smallByteArray[i / 2] >> (i % 2 == 0 ? 4 : 0)) & 0xF);
}

答案 1 :(得分:1)

您可以将此类用作帮助类

public class FoutBitsArrayEnumerator : IEnumeable<byte>
{
  FoutBitsArrayEnumerator(byte[] array)
  {
    this.array = array;
  }
  public IEnumerator<byte> GetEnumerator
  {
    foreach (byte i in array)
    {
        yield return i & 15;
        yield return (i >> 4) & 15;
    }
  }

  byte[] array;
}