首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >将十进制数转化为ipv4

将十进制数转化为ipv4

作者头像
fliter
发布2023-10-08 15:43:10
发布2023-10-08 15:43:10
5130
举报
文章被收录于专栏:旅途散记旅途散记

有十进制数c=1766948540,如何得出其对应的ipv4地址?

可将该十进制数c转为二进制数,如小于32位,前面用0补全;再划分为4等块,对每一块二进制数转化为10进制,中间用.分隔,得到的字符串即为十进制数c对应的ipv4

手算结果如下: (得出一个31位的二进制数,在最左边补齐一个0)

用代码实现:

代码语言:javascript
复制
func f2() {
 i := 1766948540
 s2 := strconv.FormatInt(int64(i), 2)

 l := len(s2)

 if l < 32 {
  s2 = fmt.Sprintf("%032s", s2) //01101001 01010001 01111110 10111100
 }

 a1 := string(s2[0:8])   //01101001
 a2 := string(s2[8:16])  //01010001
 a3 := string(s2[16:24]) //01111110
 a4 := string(s2[24:32]) //10111100

 //二进制转十进制
 d1, _ := strconv.ParseInt(a1, 2, 64)
 d2, _ := strconv.ParseInt(a2, 2, 64)
 d3, _ := strconv.ParseInt(a3, 2, 64)
 d4, _ := strconv.ParseInt(a4, 2, 64)

 ipv4 := fmt.Sprintf("%d", d1) + "." + fmt.Sprintf("%d", d2) + "." + fmt.Sprintf("%d", d3) + "." + fmt.Sprintf("%d", d4)
 fmt.Println(ipv4)

}

当然还有其他实现方法可参考,如下:

代码语言:javascript
复制
func IntToCidr(intip uint64) string {
 segIp1 := intip & 0xFF000000
 segIp1 = segIp1 >> 24
 segIp2 := intip & 0x00FF0000
 segIp2 = segIp2 >> 16
 segIp3 := intip & 0x0000FF00
 segIp3 = segIp3 >> 8
 segIp4 := intip & 0x000000FF

 ip1 := strconv.FormatUint(segIp1, 10)
 ip2 := strconv.FormatUint(segIp2, 10)
 ip3 := strconv.FormatUint(segIp3, 10)
 ip4 := strconv.FormatUint(segIp4, 10)

 return ip1 + "." + ip2 + "." + ip3 + "." + ip4

}

如xxxxxx<<2即左移2位,将最左边两位去掉,剩余部分向左移动两位,最右边空余两位用0补齐

代码语言:javascript
复制
func IntToIpv4(){

 i:= 1766948540

 fmt.Println(byte(i >> 24))
 fmt.Println(byte(i >> 16))
 fmt.Println(byte(i >> 8))
 fmt.Println(byte(i))
 
}

结果:

代码语言:javascript
复制
105
81
126
188
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 旅途散记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档