2016-06-26 34 views
1

比方說,我有:我可以對byte []執行按位操作嗎?

byte[] data = new byte[] { 1, 212, 29, 144 }; 

我能想出做位與&是第一個字節[]轉換爲uint的唯一方法:

if ((BitConverter.ToUInt32(data,0)) & 0x7) == 1) 
{ 
    //If the last 3 bits are ...111, then do something 
} 

這看起來很醜。有沒有更好的方式來執行按位操作的字節[]而不必轉換爲UInt?謝謝。

+5

'data [0]&0x7' does not work? –

+0

@SuperPeanut data [3]可以工作,因爲我想比較這個例子中的最後3位。但是,我正在尋找一種解決方案,可以對多字節值執行AND操作。 再舉一個例子,我希望能夠做這樣的事情: 如果(數據和爲0x80000000) {// 做一些真實的事情 } –

+0

不幸的是,方案只能夠比較的東西都是一樣的。要麼你將數據轉換成'UInt32',要麼將比較器('0x80000000')轉換成位數組,並對每個項目進行比較...... –

回答

1

不,在字節數組上的位操作在.Net中沒有直接的支持。

可以

  • 轉換現有的類型,像你在問題中顯示
  • 落實陣列自己和使用數組
  • 考慮操作是否BigInteger作品的情況下(支持對任意的所有位運算但有沒有直接的方式寫長常量long
  • 考慮如果BitArray適用於你的情況(更好,如果你只是需要c heck /設置特定位)。
+1

另一種方法是使用BitArray類 – Vikhram

+0

@Vikhram好點,謝謝! - 在答案中內聯。 –

+0

您忘記了不安全的解決方案。 –

相關問題