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


欢迎关注,学习不迷路!

相关推荐
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
ttwuai3 天前
Go开源后台管理系统推荐:怎么按技术栈和边界比较4个官方仓库?
golang·gin
codeejun3 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
wuyk5553 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
-梅3 天前
linux(8) 软硬链接
linux·运维·服务器
Achou.Wang3 天前
k8s中nginx worker process自动设置
后端·golang
Wang's Blog3 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
琥珀色糖3 天前
SimlpeHttp
linux·服务器
第十人i3 天前
Linux 日志管理系统:journald 配置与优化
linux·服务器
QYRdata3 天前
年均增速24.2%!机器人数据湖未来六年增长动能强劲
网络·机器人·服务发现