Go语言中ipv4与Uint32转换

简介

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的转换就介绍到这


欢迎关注,学习不迷路!

相关推荐
无线图像传输研究探索12 小时前
5G单兵图传
服务器·5g·无人机·图像传输·5g单兵图传·单兵图传·无人机图传
网硕互联的小客服12 小时前
CC攻击对服务器正常运行会有什么影响?如何预防和解决CC攻击?
运维·服务器·网络·windows·安全
大白的编程日记.12 小时前
【计算网络学习笔记】TCP套接字介绍和使用
网络·笔记·学习
Pafey13 小时前
PJSIP中的单通问题以及STUN服务器原理
服务器·网络·sip
周杰伦_Jay13 小时前
【Go语言面试题核心详细解析】基础语法、并发编程、内存管理、接口、错误处理
开发语言·后端·golang
深圳市恒讯科技13 小时前
俄罗斯服务器常见故障汇总及排查方法
运维·服务器
爱吃番茄鼠骗13 小时前
Linux操作系统———TCP网络编程
linux·网络
wanhengidc13 小时前
云端算力 云手机 巨 椰
运维·服务器·科技·智能手机·云计算
MediaTea13 小时前
Python:接口隔离原则(ISP)
开发语言·网络·python·接口隔离原则
Clarence Liu13 小时前
Golang slice 深度原理与面试指南
开发语言·后端·golang