加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C中,如何在一个参数中测试与“|”结合的几个标志之一?

发布时间:2020-12-16 10:31:45 所属栏目:百科 来源:网络整理
导读:我有下一个代码: int main(){ OwnSelect(23,FD_READ | FD_WRITE); // ---- Several arguments as one return 0;}int OwnSelect(SOCKET s,long lNetworkEvents){ // How can i check that FD_READ has been passed? if(lNetworkEvents == FD_READ) { // neve
我有下一个代码:

int main()
{
 OwnSelect(23,FD_READ | FD_WRITE); // <---- Several arguments as one
 return 0;
}

int OwnSelect(SOCKET s,long lNetworkEvents)
{
 // How can i check that FD_READ has been passed?
 if(lNetworkEvents == FD_READ)
 {
  // never here
 }
 return 0;
}

如果已经使用FD_READ传递了另一个FD,我如何检查FD_READ是否已通过.
谢谢!

解决方法

好像你在这里错过了一些基本的位操作.您正在对FD_READ和FD_WRITE(| =按位OR)执行OR运算,从而将两个值指示的位设置为参数.要检查是否已传递FD_READ,您需要使用FD_READ AND lNetworkEvents并检查结果是否等于FD_READ,如下所示:

????if(FD_READ ==(lNetworkEvents& FD_READ)){…}

这当然假设FD_READ和FD_WRITE是意图以这种方式使用的值(即,通常不具有重叠位).

编辑:修复,wabepper绝对正确:)哎呀!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读