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

if语句或AND上的C逻辑运算符,c,operators,C,Operators,此逻辑有问题,它检测到所有内容并打印检测到的坏pkt 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 } if((buff[0]!=0

此逻辑有问题,它检测到所有内容并打印检测到的
坏pkt

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
}
if((buff[0]!=0x0a | | buff[0]!=0x0e)和&(len==210))
{
printf(“从%s\n检测到badpkt”,xpi);
}否则{

如果(mysend(ssl_sd?ssl_sd[i]:NULL,sd[i],buff,len)如果希望同时允许
0x0a
0x0e
,则需要使用以下条件:

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

如果(buff[0]!=0x0a&&buff[0]!=0x0e&&(len==210)),则应该是
您需要以下逻辑:

if(buff[0] != 0x0a && buff[0] != 0x0e && len == 210)
在这种情况下:

 if((buff[0] != 0x0a || buff[0] != 0x0e) && (len == 210))
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);
}
假设
buff[0]
0x0e
,那么
buff[0]!=0x0a
将为真,这使得整个子表达式
(buff[0]!=0x0a | | buff[0]!=0x0e)
为真

您还可以反转条件:

 if((buff[0] != 0x0a || buff[0] != 0x0e) && (len == 210))
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);
}
if((buff[0]==0x0a | | buff[0]==0x0e)//始终允许这些
||(len!=210))//并允许长度不为210的任何内容
{
if(mysend(ssl\u sd?ssl\u sd[i]:NULL,sd[i],buff,len)