-2

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
}
4

2 に答える 2

1

ネットマスクの各ビットを反転し、結果をバイエンディアン 32 ビット整数の 4 バイトとして扱い、結果に 1 を加算します。したがって、255.255.252.0 => 00000000.00000000.00000011.11111111 => 1023 となり、これに 1 を加えると 1024 になります。

于 2013-10-22T11:02:04.117 に答える
0

IP アドレスは論理的で、subnet_mask で連結されています。subnet_mask を使用して、多くの net_id を切り出すことができます。例については、http: //www.garykessler.net/library/subnet_masks.htmlを参照してください。

于 2013-10-22T10:38:41.033 に答える