我有两个字节,我设置不同的位以获得不同的组合。 例如,字节1位7和字节2位1,位2使组合设备准备就绪。 现在,我已经创建了面具
#define C1_device_ready (0x80 | 0x100 | 0x200)
然后我读取数据并尝试比较。 我可以做1个字节(data [0]& mask == mask)。 但是如何计算C1_device_ready掩码,其中有两个字节,data [0] 和数据[1]。 是否可以轻松实现,或者我应该仅在单字节中进行屏蔽。 :: added :: data是unsigned char data [2]
答案 0 :(得分:5)
如果data
是unsigned char
的数组,则可以测试
if ((data[0] & mask) == (mask & 0xFF) && (data[1] & mask) == ((mask >> 8) & 0xFF))
或合并两个data[i]
并检查
if (((data[0] | (data[1] << 8)) & mask) == mask)
答案 1 :(得分:2)
使用
if (((data[0] | (data[1] << 8)) & mask) == mask) {
// do something
}
答案 2 :(得分:2)
((data[0] | (data[1]<<8)) & mask) == mask
应该有效。可能需要将内容转换为unsigned int
答案 3 :(得分:0)
尝试:
if ((*(short *)data) & C1_device_ready)