我正在尋找一種方法,可以使我獲得一系列位。例如,如果我有二進制數據從字節數組中讀取位的範圍
0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1
(2個字節)
我可能需要從範圍第3位數據,以9.換句話說,我將是感興趣的:
所以在短我會喜歡構建方法:
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;
如果你有興趣知道爲什麼我需要這個功能:
我我正在電路板上創建一個項目,並且經常需要讀取和寫入內存值。 cdf,sfr或ddf(被稱爲芯片定義文件)包含關於特定芯片的信息。這個文件可能看起來像:
; 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
因爲我讀了很多的變數(每秒80有時次)我會想有一個高效的算法。我想我的做法是,如果字節大小是8,那麼我會從這8個字節創建一個long,然後使用<<
和>>
運算符來獲得我需要的。如果bytesize如果4,那麼我將創建一個int並使用<<
和>>
運算符,但是如果我需要讀取16個字節,我該怎麼做呢? 我想我的問題應該是如何在自定義結構類型上實現<<
和>>
運算符。
每秒80次?這與3D遊戲在屏幕上繪製幀的速度相同。你不需要一個非常有效的算法。 –