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)时会溢出,会将左边部分丢弃。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值