2012-04-08 15 views
2

私は長さ64のバイト配列を持っています。このバイト配列内のデータが何に対応しているかというシーケンシャルなリストがあります。このリストは、各値がビット単位で表示されます。ほとんどの値は8または16ビットであり、簡単に解読できます。しかし、リストの途中では、12ビットまたは5ビットの長さが始まります。これらをループして必要なビットを引き出す最も良い方法は何ですか?ビット配列内の分割バイト配列

+3

###とコードは? – nawfal

+0

データを持つバイト配列があり、それを別の配列に従って5/8/12/16ビットのチャンクに分割したいですか? ushort/uintの配列に分割しますか?または何? – erikH

+0

@erikH - ビット数のサイズは、私が見ている2つのファイルでは異なりますが、ヘッダーに定義されています。このヘッダーの後にデータが続きます。データを読むためには頭を見て聞き手の情報を参照することでそれを理解することができます。とにかくC#でこれに取り組むための最良のアプローチを見つけようとしています。 – poco

答えて

1

次のコードは、uint[]として格納されたデータバッファからnビットを抽出する必要があります。私はそれをテストしていないので、注意書きの講師

uint GetBits(uint[] data, ref uint pos, uint n) { 
    uint a = pos/32; 
    uint off = pos%32; 
    uint mask = (1 << n) - 1; 
    pos += n; 
    return (data[a] << off)&mask | (data[a + 1] >> (32 - off))&mask; 
} 

アラインされていない値は次の低いビットに一つの単語の高いビットから流れるように、それは、リトルエンディアンストレージを想定しています。