简介
ip对于我们都不陌生,但是如果有一道题目要你判断某个ip在不在一个ip段的范围内,该怎么做呢,要是能把它弄成可比较的数字就好了
例如 127.0.0.1如何转数字呢,我们可以把它分成四段 127 0 0 1 每一段转为二进制拼起来 01111111 00000000 00000000 00000001
再转成uint32 变为 2130706433,这个时候就是一个数字了
实现
go
func main() {
ip := []int{127, 0, 0, 1}
b := toInt(ip)
fmt.Println(b)
}
func toInt(ip []int) uint32 {
return uint32(ip[3]) | uint32(ip[2])<<8 | uint32(ip[1])<<16 | uint32(ip[0])<<24
}
输出2130706433
内置函数实现
其实在net包里也有相应的实现
代码如下
go
func main() {
b := Ipv4ToUint32("192.168.0.2")
fmt.Println(b)
fmt.Println(Uint32ToIpv4(b))
}
func Ipv4ToUint32(ip string) uint32 {
netIp := net.ParseIP(ip)
if netIp == nil {
return 0
}
return binary.BigEndian.Uint32(netIp.To4())
}
func Uint32ToIpv4(ip uint32) string {
ipByte := make([]byte, 4)
binary.BigEndian.PutUint32(ipByte, ip)
return net.IP(ipByte).String()
}
输出
3232235522
192.168.0.2
ip与int的转换就介绍到这
欢迎关注,学习不迷路!