Golang IPv4 字符串与整数互转方式

 更新时间:2023年11月22日 14:54:27   作者:风神韵  
这篇文章主要介绍了Golang IPv4 字符串与整数互转方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1. 字符串转整数

第一步:

  • 是使用 net.ParseIP 判断字符串是否是合法的 IPv4 地址。
  • 如果合法,net.ParseIP 会将其转换成字符数组([]byte)。

第二步:

  • 是使用 binary.Read 方法将上面的字符数组以大端对齐的方式写入 ret 变量中。
func InetAddr(ipaddr string) uint32 {
	var ret uint32
 
	ip := net.ParseIP(ipaddr)
	if ip == nil {
		return 0
	}
 
	if err := binary.Read(bytes.NewBuffer(ip.To4()), binary.BigEndian, &ret); err != nil {
		return 0
	}
 
	return ret
}

2. 整数转字符串

整数转字符串比较简单,

以一个例子来演示:

有 IPv4 地址十六进制整数表示形式为 0x01020304,将其分别移位24、16、8、0后,

会得到 IP 地址字符串表示形式的 4 段:

byte(0x01020304 >> 24) = byte(0x01)           = 1

byte(0x01020304 >> 16) = byte(0x0102)       = 2

byte(0x01020304 >> 8) = byte(0x010203)     = 3

byte(0x01020304 >> 0) = byte(0x01020304) = 4

将这四个值用 . 拼接后,即可得到字符串表式:1.2.3.4

func IPv4Uint32ToString(ip uint32) string {
    return fmt.Sprintf("%d.%d.%d.%d", byte(ip>>24), byte(ip>>16), byte(ip>>8), byte(ip))
}

注意:

byte 在强制转换大于其存储最大值时(0xff)时会溢出,会将左边部分丢弃。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 一步步教你在Linux上安装Go语言环境

    一步步教你在Linux上安装Go语言环境

    本文将介绍如何在Linux操作系统下搭建Go语言环境,Go语言是一种开源的编程语言,具有高效、简洁和并发性强的特点,适用于开发各种类型的应用程序,搭建Go语言环境是开始学习和开发Go语言项目的第一步,本文将详细介绍安装Go语言、配置环境变量以及验证安装是否成功的步骤
    2023-10-10
  • GO语言中err接口及defer延迟异常处理分析

    GO语言中err接口及defer延迟异常处理分析

    这篇文章主要为大家介绍了GO语言中err接口及defer延迟异常处理的示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Go语言init函数详解

    Go语言init函数详解

    今天小编就为大家分享一篇关于Go语言init函数详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • go语言的四数相加等于指定数算法

    go语言的四数相加等于指定数算法

    这篇文章主要介绍了go语言的四数相加等于指定数算法的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 详解go-zero如何实现令牌桶限流

    详解go-zero如何实现令牌桶限流

    令牌桶算法既能够将所有的请求平均分布到时间区间内,又能接受服务器能够承受范围内的突发请求,因此是目前使用较为广泛的一种限流算法,本文就来看看go-zero如何实现令牌桶限流的吧
    2023-08-08
  • Go语言中Struct与继承与匿名字段和内嵌结构体全面详解

    Go语言中Struct与继承与匿名字段和内嵌结构体全面详解

    这篇文章主要介绍了Go语言中Struct与继承与匿名字段和内嵌结构体,Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性,感兴趣的可以了解一下
    2023-04-04
  • 解决golang内存溢出的方法

    解决golang内存溢出的方法

    这篇文章主要介绍了解决golang内存溢出的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 简单高效!Go语言封装二级认证功能实现

    简单高效!Go语言封装二级认证功能实现

    本文将介绍如何使用Go语言封装二级认证功能,实现简单高效的用户认证流程,二级认证是一种安全措施,要求用户在登录后进行额外的身份验证,以提高账户安全性,
    2023-10-10
  • go generate代码自动生成指南

    go generate代码自动生成指南

    这篇文章主要介绍了go generate代码自动生成指南,本文将探讨 go generate 命令的使用方法、原理以及一些实际应用场景,希望读者能够更好地理解和运用这个强大的工具
    2024-01-01
  • Go实现自己的网络流量解析和行为检测引擎原理

    Go实现自己的网络流量解析和行为检测引擎原理

    这篇文章主要为大家介绍了Go实现自己的网络流量解析和行为检测引擎原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论