2012-05-12 10 views

答えて

1

シフト演算子を使用してバイトを取得するための小さなヘルパーメソッドを作成してください。

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

戻り5ビット位置から8ビット0xFF

あなたはモジュロ演算子を%

+0

x [0] << 4 | x[1] >> 4を意味していませんか? – wsh8z

+0

ええ、そうです – Martin

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、カウントを追加したり、呼び出しメソッドの範囲内で渡すことができます。

関連する問題