0

我有两个字节,我正在设置不同的位以获得不同的组合。例如,字节 1 位 7 和字节 2 位 1,位 2 使组合设备就绪。现在,我已经创建了面具

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

然后我读取数据并尝试比较。我可以做 1 个字节(数据 [0] 和掩码 == 掩码)。但是我怎样才能为有两个字节 data[0] 和 data[1] 的 C1_device_ready 掩码计算它。是否很容易或者我应该只在单个字节中进行屏蔽。::add::data 是无符号字符数据[2]

4

4 回答 4

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)
于 2012-08-10T11:59:16.490 回答
2

采用

if (((data[0] | (data[1] << 8)) & mask) == mask) {
    // do something
}
于 2012-08-10T12:01:29.337 回答
2
((data[0] | (data[1]<<8)) & mask) == mask

应该管用。可能需要将事物转换为unsigned int

于 2012-08-10T12:01:49.230 回答
0

尝试:

if ((*(short *)data) & C1_device_ready)
于 2012-08-10T12:10:17.237 回答