代码之家  ›  专栏  ›  技术社区  ›  Blam

拆分8位字节

  •  0
  • Blam  · 技术社区  · 14 年前

    假设我有一个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 回复  |  直到 14 年前
        1
  •  1
  •   Itay Karo    14 年前

    可以将此类用作帮助程序类

    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;
    }
    
        2
  •  1
  •   Matthew Flaschen    14 年前

    如果我理解正确(bigbytearray是16长,smallbytearray是8长,打包):

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