我有一组操作码来执行特定功能,但棘手的部分在这里:例如,在下面的发布代码中,channelABC是输入,这意味着:如果在我的产品侧具有通道A或通道b,或者如果在我的产品端,选择了渠道c,它应该匹配或。如果选择了通道b和c,则应该匹配,基本上,如果一个或多个通道匹配(输入侧或产品侧),则-LED必须发光。
我试图映射它,但是我不确定这样做的正确方法
typedef enum{
ZoneA = 0x01,
ZoneB = 0x02,
ZoneC = 0x04,
ZoneD = 0x08,
zoneE = 0x10,
ZoneF = 0x20,
ZoneG = 0x40,
ZoneH = 0x80,
ZoneABCD = 0x0f,
ZoneAB = 0x03,
ZoneAC = 0x05,
ZoneAD = 0x09,
ZoneBC = 0x06,
ZoneBD = 0x0A,
ZoneCD = 0x0C,
ZoneABC = 0x07 ,
ZoneABD = 0x0B,
ZoneBCD = 0x0E,
NOZONE = 0x00
}zone;
railzone =buffers[0]; //rail zone read the value , which is the first element in the buffer when the packet info is transformed to buffer
//railzone will have the input here
if(railzone ==ZoneABCD || railzone == ZoneA || railzone == ZoneB || railzone == ZoneC || railzone == ZoneD || railzone == ZoneAB
|| railzone == ZoneAC || railzone == ZoneAD || railzone == ZoneBC || railzone == ZoneBD || railzone == ZoneCD || railzone == ZoneABC ||
railzone == ZoneABD || railzone == ZoneBCD )
{
}
我以ZONEABC作为输入,我的产品中有zoneAB,由于存在zoneA和b中的两个,它应该使LED发光
答案 0 :(得分:1)
您可以使用口罩的概念。 定义产品支持的区域的遮罩,即创建变量并为产品支持的每个区域设置位。 例如,如果您的产品支持A区和C区
(考虑您的枚举)
#define PRODUCT_MASK (ZoneA | ZoneC)
然后将输入内容清理为
if((railzone_input & PRODUCT_MASK) != 0)
{
// Zone is supported
}
else
{
// Zone is not supported
}
如果您的railzone_input是ZoneBC(即6),并且如我在上面的示例中所考虑的那样,则您的PRODUCT_MASK将为5。因此6&5 = 4,即== 0,即支持Zone。
如果railzone_input为ZoneB(即2),则2&5 = 0,即== 0,即不支持Zone。
答案 1 :(得分:0)
尚不清楚您需要做什么,但如果您设置了变量的某些位,则似乎要执行特定的操作,这可以使用&
(和)运算符完成。
例如,如果您想在任何启用了区域A(位0)的railzone
上做某事,则可以
railzone = ZoneAB;
if ((railzone & ZoneA) == ZoneA) {
// turn on led for ZoneA?
}