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


欢迎关注,学习不迷路!

相关推荐
丶Darling.2 分钟前
MIT 6.S081 Lab1: Xv6 and Unix utilities翻译
服务器·unix·lab·mit 6.s081·英文翻译中文
黄小耶@11 分钟前
linux常见命令
linux·运维·服务器
叫我龙翔12 分钟前
【计网】实现reactor反应堆模型 --- 框架搭建
linux·运维·网络
tyler_download24 分钟前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
hlsd#25 分钟前
go mod 依赖管理
开发语言·后端·golang
杜杜的man29 分钟前
【go从零单排】迭代器(Iterators)
开发语言·算法·golang
亦世凡华、29 分钟前
【启程Golang之旅】从零开始构建可扩展的微服务架构
开发语言·经验分享·后端·golang
粤海科技君1 小时前
如何使用腾讯云GPU云服务器自建一个简单的类似ChatGPT、Kimi的会话机器人
服务器·chatgpt·机器人·腾讯云
傲骄鹿先生1 小时前
阿里云centos7.9服务器磁盘挂载,切换服务路径
服务器·阿里云·磁盘
不爱学习的YY酱1 小时前
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(4)
网络·计算机网络