在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
}
在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
}
反转网络掩码中的每一位,将结果视为 bigendian 32 位整数的 4 个字节,并将结果加 1。所以 255.255.252.0 => 00000000.00000000.00000011.11111111 => 1023,加 1 就是 1024。
ip 地址是逻辑的,并带有子网掩码。子网掩码可用于分割出许多 net_id。在此处阅读示例:http ://www.garykessler.net/library/subnet_masks.html 。