在網絡中,CIDR /32
表示該地址只能用作網絡地址本身,不能分配給任何主機。因此,在計算主機數量時,應將 CIDR 地址按照其位掩碼長度進行區分。對于 /32
子網掩碼,主機數量總是為 1,而不是 -1。
以下是修正后的代碼,可以正確地處理 /32
CIDR 地址:
package mainimport ("fmt""math""net"
)func main() {cidr := "10.22.2.1/32"hostCount, err := calculateHostCount(cidr)if err != nil {fmt.Println("Error:", err)return}fmt.Printf("Number of hosts in %s: %d\n", cidr, hostCount)
}func calculateHostCount(cidr string) (int, error) {_, ipNet, err := net.ParseCIDR(cidr)if err != nil {return 0, err}maskLen, _ := ipNet.Mask.Size()if maskLen == 32 {return 1, nil}hostCount := int(math.Pow(2, float64(32-maskLen))) - 2return hostCount, nil
}
通過添加了對 /32
子網掩碼的特殊處理,現在代碼會返回正確的主機數量 1,而不是 -1。