dwRemIP=htonl(mibtcp->table[i].dwRemoteAddr);
addrRem.S_un.S_addr = ntohl(dwRemIP);
上面两行代码中,htonl函数将一个无符号长整形转换为一个网络字节顺序,而ntohl函数恰好相反,将一个网络字节顺序转换为一个无符号长整形,这是不是又转换回来了,是不是多此一举啊?本人学识浅薄,请高手赐教。vchtonlntohl网络

解决方案 »

  1.   

    如果你的代码中这两句是连续的, 那就是多余的.
    除非dwRemIP这个变量有其它用途
      

  2.   

    dwRemIP
    addrRem.S_un.S_addr
    这两个变量都有对应的数据了
      

  3.   

    如果你觉得dwRemIP变量之后不会用到,那你直接赋值就好了addrRem.S_un.S_addr = mibtcp->table[i].dwRemoteAddr
      

  4.   

    都以为htonl是转过去,ntohl是转回来,其实是错了。
    比如你发的时候先htonl,则转换一次,接收的时候,ntohl转换回来,还是没有达到跨不同字节顺序的系统之间的正确通信的目的(你应该知道这个目的吧)。正确的行为是:
    htonl,主机到网络字节序,如果你的系统也是网络字节序,则这个函数什么也不做,这样达到一个目的,不管什么字节序的系统,经过htonl之后,都变成了网络序。ntohl,网络字节序到主机序,如果你的系统也是网络字节序,则这个函数什么也不做,这样达到一个目的,不管什么字节序的系统,经过ntohl之后,都变成了主机序。