C if语句或AND上的逻辑运算符

时间:2013-04-23 23:20:17

标签: c operators

这个逻辑出现了问题,它检测到所有内容并打印bad pkt detected

if((buff[0] != 0x0a || buff[0] != 0x0e) && (len == 210))
{
    printf("badpkt detected from %s\n", xpi);
} else {
    if(mysend(ssl_sd ? ssl_sd[i] : NULL, sd[i], buff, len) <= 0) MULTI_SKIP_QUIT
}

逻辑是DENY所有长度为210的数据包。除非第一个字节是0x0A或0x0E。

此代码正在运行:

if((buff[0] != 0x0a) && (len == 210))
{
    printf("badpkt detected from %s\n", xpi);
} else {
    if(mysend(ssl_sd ? ssl_sd[i] : NULL, sd[i], buff, len) <= 0) MULTI_SKIP_QUIT
}

但我需要0x0a0x0e同时成为唯一允许的210个长度数据包。

修改

我在想什么,也许是因为睡眠不足。

3 个答案:

答案 0 :(得分:1)

如果您同时允许0x0a0x0e,则需要使用以下条件:

if((buff[0] == 0x0a || buff[0] == 0x0e) && (len == 210))

答案 1 :(得分:1)

(buff[0] != 0x0a || buff[0] != 0x0e)始终为 true

应为if(buff[0] != 0x0a && buff[0] != 0x0e && (len == 210))

答案 2 :(得分:0)

你需要这个逻辑:

if(buff[0] != 0x0a && buff[0] != 0x0e && len == 210)

有了这个条件:

 if((buff[0] != 0x0a || buff[0] != 0x0e) && (len == 210))

想象buff[0]0x0e。然后buff[0] != 0x0a将为真,这使得整个子表达式(buff[0] != 0x0a || buff[0] != 0x0e)为真。

您也可以反转条件:

if((buff[0] == 0x0a || buff[0] == 0x0e) //always allow these
     || (len != 210)) //and allow anything thats not of length 210
{
    if(mysend(ssl_sd ? ssl_sd[i] : NULL, sd[i], buff, len) <= 0) 
         MULTI_SKIP_QUIT

} else {
     printf("badpkt detected from %s\n", xpi);
}