如何将两位添加到十六进制中

时间:2012-08-10 11:55:07

标签: c++ c hex bits

我有两个字节,我设置不同的位以获得不同的组合。 例如,字节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]

4 个答案:

答案 0 :(得分: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)

答案 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)