我有兩個8位數字的十六進制字符串。我需要對這兩個十六進制字符串進行應用和操作,然後將右移到7位並獲取十進制值。我已經嘗試將Hex字符串轉換爲長度爲4的字節數組(8 * 2 = 32位= 4字節),並對相同順序的各個字節進行了操作,將結果保存到另一個長度爲4的字節數組中。如何進行位移到這個字節數組?右移字節數組
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 data1Bytes之間操作,data2Bytes其給出輸出:bytearray1 [0,0,48,0](對於這些0000-0000 0000-0000 0011-0000 0000-0000和十進制值的位是12,288)。
直到這一步,我所有的轉換和計算都按預期工作。 現在我需要右移7位的這個結果應該給0000-0000 0000-0000 0000-0000 0110-0000(十進制值爲96)。
1)我試圖轉換字節數組int和應用右移
var res = BitConverter.ToInt32(bytearray1, 0);
var shift = res >> 7;
但解析度= 3145728(它應該是12228)和換檔= 24576(其應爲96)
2 )我已經累轉換bytearray1 [0,0,48,0]到BitArray但在所得BitArray比特以相反的順序
var bitArray = new BitArray(bytearray1);
bitArray [0] ... bitArray [19] = FALSE,bitArray [20 ] = bitArray [21] = true,bitArray [22] ... bitArray [31] = false。
bitArray [0] ----------- [31]:0000 0000 0000 0000 0000 1100 0000 0000,
比特移位該結果錯誤的值。 請幫我這個,我失蹤了?
你說「右移」,但你的例子左移00110000到01100000.哪一個是正確的?也許你只需要用'<<'替換'>>'...... –
@MthetheWWatson嗨,如果你看到最後一位的表示形式,我剛剛在將bytearray1轉換爲bitArray之後顯示了位數組中存儲的位。在完成和操作字節之後,我需要對我的最終結果進行移位。 –
嗯,但你說'現在我需要右移7位的這個結果,應該給0000-0000 0000-0000 0000-0000 ** 0110-0000 **',鑑於上一步有'0000-0000 0000-0000 ** 0011-0000 ** 0000-0000',是左移。 –