【问题标题】:How to calculate the AND operation of an IPaddress and a subnet mask in C?如何在C中计算IP地址和子网掩码的AND运算?
【发布时间】:2011-01-19 15:56:08
【问题描述】:

我有一个 IP 地址和子网掩码,都是无符号长的;我怎样才能将这两者都与并检查我的传入 ipaddress (ip2) 是否属于同一个子网?

喜欢:

if (ip1 & subnet == ip2 & subnet)
    then same subnet.  

【问题讨论】:

    标签: c ip-address subnet


    【解决方案1】:

    使用括号 - 优先级令人困惑:

    if ((ip1 & subnet) == (ip2 & subnet))
        ...
    

    原始代码实际上与以下代码相同:

    if (ip1 & (subnet == ip2) & subnet)
        ...
    

    【讨论】:

    • 一个好的编译器应该警告这一点。如果使用-Wall 调用,GCC 会这样做。
    【解决方案2】:

    就像你做的那样:

    if ((ip1 & subnet) == (ip2 & subnet))
      printf("same subnet 0%x", subnet);
    

    (只是添加了 () 以确保以正确的顺序完成计算)。

    【讨论】:

      猜你喜欢
      • 2012-01-22
      • 2013-01-16
      • 2011-01-31
      • 2010-10-21
      • 1970-01-01
      • 2016-01-15
      • 2016-05-22
      • 2010-12-01
      • 1970-01-01
      相关资源
      最近更新 更多