2012-08-10 82 views
0

我有兩個字節,我設置不同的位,以獲得不同的組合。 例如,字節1的位7和字節2的位1,位2使組合設備就緒。 現在,我已經創建了面具如何將兩位添加到十六進制

#define C1_device_ready (0x80 | 0x100 | 0x200) 

然後我讀的數據,並嘗試比較。 1字節我可以做(數據[0] &掩碼==掩碼)。 但是我怎樣才能計算它有兩個字節,數據[0] 和數據[1]的C1_device_ready掩碼。 它很容易或我應該只在單個字節掩蓋。 ::加入::數據是無符號字符數據[2]

回答

5

如果dataunsigned char陣列,則可以測試

if ((data[0] & mask) == (mask & 0xFF) && (data[1] & mask) == ((mask >> 8) & 0xFF)) 

或組合兩個data[i]並檢查

if (((data[0] | (data[1] << 8)) & mask) == mask) 
+0

感謝的作品。你能否解釋一下這種轉變(<< 8)。 – user1566277 2012-08-10 12:19:56

+0

'data [0] | (data [1] << 8)'將來自'data'數組的兩個字節組合到一個'int'中,在最低有效字節中有'data [0]',每個班次的最低有效字節。由於位操作'''和'|'自動進行整數提升,所以不需要手動將一個轉換插入到較大的類型。 – 2012-08-10 12:27:36

+0

這解釋得很好。非常感謝這樣一個明確的答案。 – user1566277 2012-08-10 12:40:31

2

使用

if (((data[0] | (data[1] << 8)) & mask) == mask) { 
    // do something 
} 
2
((data[0] | (data[1]<<8)) & mask) == mask 

應該工作。可能需要投事情unsigned int

0

嘗試:

if ((*(short *)data) & C1_device_ready) 
+1

你應該添加==掩碼 – Gir 2012-08-10 12:17:55

相關問題