0

私はC#でバイト配列を持っています。バイト境界にない可能性のあるビット位置から始まる特定のバイト数を引き出す必要があります。

4

2 に答える 2

1

シフト演算子を使用してバイトを取得する小さなヘルパー メソッドを記述します。

byte[] x = new[] {0x0F, 0xF0}
result = x[0] << 4 | x[1] >> 4;

5 番目のビット位置から 8 ビットを返します0xFF

モジュロ演算子を使用して位置を簡単に変えることができます%

于 2012-05-12T12:19:25.190 に答える
0

バイトは、.NET の標準ストリーム リーダーで読み取ることができる最小の配置です。

ビットを読み取る場合は、ビットごとの演算子とマスクを使用して、ビットがオン (1) かオフ (0) かを判断する必要があります。

ただし、これは、ブール値の true/false を使用して、バイトの内容を伝えることができることを意味します。1 つの方法は、ビットをブール列挙に読み込むことです。この拡張メソッドのようなものが機能する可能性があります。

public static IEnumerable<bool> BitsToBools(IEnumerable<byte> input)
{
    int readByte;
    while((readByte = input.MoveNext()) >= 0)
    {
        for(int i = 7; i >= 0; i--) // read left to right
            yield return ((readByte >> i) & 1) == 1;
    }
}

必要に応じて拡張メソッドに startIndex と count を追加するか、呼び出し元のメソッドから範囲を渡すことができます。

于 2012-05-12T13:32:04.227 に答える