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
}
ネットマスクの各ビットを反転し、結果をバイエンディアン 32 ビット整数の 4 バイトとして扱い、結果に 1 を加算します。したがって、255.255.252.0 => 00000000.00000000.00000011.11111111 => 1023 となり、これに 1 を加えると 1024 になります。
IP アドレスは論理的で、subnet_mask で連結されています。subnet_mask を使用して、多くの net_id を切り出すことができます。例については、http: //www.garykessler.net/library/subnet_masks.htmlを参照してください。