Разделить 8-битный байт - PullRequest
       17

Разделить 8-битный байт

0 голосов
/ 19 октября 2010

Итак, скажем, у меня есть массив байтов длиной 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 ]

1 голос
/ 19 октября 2010

вы можете использовать этот класс как вспомогательный класс

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;
}
1 голос
/ 19 октября 2010

Если я правильно понимаю (bigByteArray - 16 long, smallByteArray - 8 long, pack):

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