私は8桁の2つの16進文字列を持っています。これらの2つの16進文字列を適用して操作し、次に7ビットに右シフトを適用して10進値を取得する必要があります。私は16進数の文字列を長さ4(8 * 2 = 32ビット= 4バイト)のバイト配列に変換しようとしましたが、同様の順序で個々のバイトに対して&の演算を行い、長さ4の別のバイト配列に結果を保存しました。このバイト配列に?出力与えるdata1Bytes間バイト配列の右シフト
Ex : data1 in hex: 0x40003019,
data1 in bits: 0100-0000 0000-0000 0011-0000 0001-1001,
data1 in bytes: 64 0 48 25,
data2 in hex: 0x00FFFF80,
data2 in bits : 0000-0000 1111-1111 1111-1111 1000-0000,
data2 in bytes : 0 255 255 128
AND演算、data2Bytes:[0,0,48,0] bytearray1(これら0000-0000 0000-0000 0000-0000 0011から0000および小数点値のためのビットは12,288です)。
これまでのすべてのコンバージョンと計算は期待通りに機能しています。 今私は0000-0000 0000-0000 0000-0000 0110-0000(96の10進値)を与えるべきこの最終結果の7ビットを右にシフトする必要があります。
1)Iは右シフトをINTと適用するバイト配列を変換しようとしている
var res = BitConverter.ToInt32(bytearray1, 0);
var shift = res >> 7;
しかしRES = 3145728(12,228であること)およびシフトべき= 24,576(あるべきである96)
2 )私は疲れ逆の順序で[0,0,48,0] bitArrayになくビット得bitArrayにbytearray1変換された
var bitArray = new BitArray(bytearray1);
bitArray [0] ... bitArrayは[19]、[20 bitArrayを偽= ] = bitArray [21] = true、bitArray [22] ... bitArray [31] = falseです。
bitArray [0] ----------- [31]:0000 0000 0000 0000 0000 1100 0000 0000この結果、間違った値をシフト
ビット。 私が逃していること、これで私を助けてください?
あなたは「右シフト」と言っていますが、あなたの例は00110000から01100000に左シフトしています。どちらが正しいですか?おそらく '' 'を' << 'に置き換えるだけでよいでしょう... –
@MatthewWatsonこんにちは、最後のビット表現を見ているならば、私はbytearray1をbitArrayに変換した後にビット配列に格納されたビットを示したところです。バイト間の操作と操作の後、私の最終結果を右シフトする必要があります。 –
ええと、しかし、あなたは「今度は、0000-0000 0000-0000 0000-0000 ** 0110-0000 **を与えるはずのこの最終結果の7ビットを右にシフトする必要があると言う。前のステップが '0000-0000 0000-0000 ** 0011-0000 ** 0000-0000'は、左シフトです。 –