给定网络掩码,计算可用主机的数量?

时间:2013-10-22 10:22:57

标签: linux go network-programming

在Go中,我找到了这样的算法,但是我不明白,有人能为我解释一下,谢谢!

func networkSize(mask net.IPMask) int32 {
    m := net.IPv4Mask(0, 0, 0, 0)
    for i := 0; i < net.IPv4len; i++ {
        m[i] = ^mask[i]
    }

    return int32(binary.BigEndian.Uint32(m)) + 1
}

2 个答案:

答案 0 :(得分:1)

反转网络掩码中的每个位,将结果视为bigendian 32位整数的4个字节,并将1加到结果中。所以255.255.252.0 =&gt; 00000000.00000000.00000011.11111111 =&gt; 1023,向此添加1为1024。

答案 1 :(得分:0)

ip地址是逻辑的,并且与subnet_mask一起使用。 subnet_mask可用于创建许多net_id。请阅读此处的示例:http://www.garykessler.net/library/subnet_masks.html