私はビットの範囲を取得する方法を探しています。例えば、私が持っている場合は、バイナリデータバイト配列からビット範囲を読み取る
0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1
私は私がに興味があるつまり9までの範囲のビット3からデータを取得する必要があるかもしれません
(2バイト):
ので、簡単に言えば、私は方法を構築するようになる:
byte[] Read(byte[] data, int left, int right){
// implementation
}
new byte[]{91,215}, 3, 9
を渡すと、byte[]{122}
(バイト91と215 = 0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1
、バイト122 = 1 1 1 1 0 1 0
の例と同じバイナリデータが得られます。
私は、このような何かをやって、バイト配列に<<
演算子を使用するとよいでしょう:あなたは、私はこの機能を必要とする理由を知って興味を持っている場合は
byte[] myArray = new byte[] { 1, 2, 3 };
var shift = myArray << 2;
を:
Iボード上にプロジェクトを作成しており、しばしばメモリに値を読み書きする必要があります。 cdf、sfr、またはddf(チップ定義ファイルと呼ばれます)には、特定のチップに関する情報が含まれています。私は効率的なアルゴリズムを持っているとします(毎秒時には80回)の変数の多くを読んでいますので
; Name Zone Address Bytesize Displaybase Bitrange
; ---- ---- ------- -------- ----------- --------
sfr = "SPI0_CONTROL" , "Memory", 0x40001000, 4, base=16
sfr = "SPI0_CONTROL.SPH" , "Memory", 0x40001000, 4, base=16, bitRange=25-25
sfr = "SPI0_CONTROL.SPO" , "Memory", 0x40001000, 4, base=16, bitRange=24-24
sfr = "SPI0_CONTROL.TXRXDFCOUNT" , "Memory", 0x40001000, 4, base=16, bitRange=8-23
sfr = "SPI0_CONTROL.INT_TXUR" , "Memory", 0x40001000, 4, base=16, bitRange=7-7
sfr = "SPI0_CONTROL.INT_RXOVF" , "Memory", 0x40001000, 4, base=16, bitRange=6-6
:このファイルは次のように見えるかもしれません。バイトサイズが8の場合、8バイトから長いバイトを作成し、<<
と>>
演算子を使用して、必要なものを取得するというアプローチをとっています。 bytesizeが4の場合、intを作成して<<
と>>
演算子を使用しますが、16バイトを読み込む必要がある場合はどうすればできますか? 私の質問は、<<
と>>
演算子をカスタムの構造体型に実装する方法でした。
毎秒80回ですか?これは、3Dゲームがフレームを画面に描画するのと同じ速度です。非常に効率的なアルゴリズムは必要ありません。 –