You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Golang中实现IP网段映射转换?

在Golang中实现IP地址段映射

问题描述

在Golang中,如何将10.222.1.2/16转换为10.223.1.2/16?可认为掩码保持不变。

示例代码

func Netmap(ip string, dest string) string{}
Netmap("10.222.1.2/16", "10.223.0.0/16") // => "10.223.1.2/16"
Netmap("10.222.1.5/16", "10.224.0.0/16") // => "10.224.1.5/16"

2023/05/09 更新

@Volker:你已经尝试了什么?在哪里遇到了问题?

非常抱歉之前的描述不够详细。如果在纸上完成转换,我的思路如下:
我的思路

我尝试通过代码实现这一过程,找到了一系列可将IP转换为[]byte、uint32等类型的方法:

ip, ipNet, _ := net.ParseCIDR("10.222.1.2/16")
bytes := []byte(ip)
maskBits := binary.BigEndian.Uint32(ipNet.Mask)
ipBits := binary.BigEndian.Uint32(ip.To4())

prefix, _ := netip.ParsePrefix("10.222.1.2/16")
binary, _ := prefix.Addr().MarshalBinary()

但我不太清楚这些内容的含义,以及如何操作这些数据。

非常感谢@Zeke Lu,我正在学习理解这行代码,我很少使用位运算符,对它们不太熟悉:

v := ((v2 >> (32 - bits)) << (32 - bits)) | ((v1 << bits) >> bits)

内容的提问来源于stack exchange,提问作者wyz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 07:10:11