您好! 请登录 注册

IP地址转换:数字与字符串之间的转换

发表时间: 2020-02-14 17:35:54

浏览: 503

网站开发,小程序开发,APP开发,电商平台开发,业务系统的开发和后期的运维外包服务,企业邮箱上云,企业网站上云,企业业务系统上云,企业存储上云,企业APP小程序上云,阿里云产品的提供,运维外包,办公设备维护,IT外包服务


迎战疫情,艾锑无限用爱与您同行

为中国中小企业提供免费IT外包服务

 

 

这次的肺炎疫情对中国的中小企业将会是沉重的打击,据钉钉和微信两个办公平台数据统计现有2亿左右的人在家远程办公,那么对于中小企业的员工来说不懂IT技术将会让他们面临的最大挑战和困难。

 

电脑不亮了怎么办?系统蓝屏如何处理?办公室的电脑在家如何连接?网络应该如何设置?VPN如何搭建?数据如何对接?服务器如何登录?数据安全如何保证?数据如何存储?视频会议如何搭建?业务系统如何开启等等一系列的问题,都会困扰着并非技术出身的您。

 

C:\Users\Vincent\Desktop\艾锑无限的爱.jpg

 

好消息是当您看到这篇文章的时候,就不用再为上述的问题而苦恼,您只需拨打艾锑无限的全国免费热线电话:400 650 7820,就会有我们的远程工程师为您解决遇到的问题,他们可以远程帮您处理遇到的一些IT技术难题。

 

如遇到免费热线占线,您还可以拨打我们的24小时值班经理电话:15601064618或技术经理的电话:13041036957,我们会在第一时间接听您的来电,为您提供适合的解决方案,让您无论在家还是在企业都能无忧办公。

 

那艾锑无限具体能为您的企业提供哪些服务呢?

C:\Users\Vincent\Pictures\艾锑无限\jlogo.png

艾锑无限始创于2005年,历经15年服务了5000多家中小企业并保障了几十万台设备的正常运转,积累了丰富的企业IT紧急问题和特殊故障的解决经验,制定了相对应的解决方案。我们为您的企业提供的IT服务分为三大版块:

 

第一版块是保障性IT外包服务:电脑设备运维办公设备运维网络设备运维服务器运维等综合性企业IT设备运维服务。

 

第二版块是功能性互联网外包服务:网站开发外包小程序开发外包APP开发外包电商平台开发外包业务系统的开发外包和后期的运维外包服务。

 

第三版块是增值性云服务外包:企业邮箱上云企业网站上云企业存储上云企业APP小程序上云企业业务系统上云阿里云产品等后续的云运维外包服务。

 

您要了解更多服务也可以登录艾锑无限的官网:www.bjitwx.com查看详细说明,在疫情期间,您企业遇到的任何困境只要找到艾锑无限,能免费为您提供服务的我们绝不收一分钱,我们全体艾锑人承诺此活动直到中国疫情结束,我们将这次活动称为——春雷行动。

 

以下还有我们为您提供的一些技术资讯,以便可以帮助您更好的了解相关的IT知识,帮您渡过疫情中办公遇到的困难和挑战,艾锑无限愿和中国中小企业一起共进退,因为我们相信万物同体,能量合一,只要我们一起齐心协力,一定会成功。再一次祝福您和您的企业,战胜疫情,您和您的企业一定行。

艾锑无限为您整理:IP地址转换:数字与字符串之间的转换

IP 地址库中 IP 地址的保存格式一般有两种,一种是点分十进制形式(192.168.1.1),另一种是数字形式(3232235777),应用中,经常需要在这两种格式之间做转换。

IP 地址库中 IP 地址的保存格式一般有两种,一种是点分十进制形式(192.168.1.1),另一种是数字形式(3232235777),应用中,经常需要在这两种格式之间做转换。

IP地址转换:数字与字符串之间的转换

针对这一个问题我在 exnet 扩展包里面实现可两者的转换的快捷方法:

  • func IP2Long(ip net.IP) (uint, error) IP2Long net.IP 转为数值
  • func Long2IP(i uint) (net.IP, error) Long2IP 把数值转为 net.IP
  • func IPString2Long(ip string) (uint, error) IPString2Long ip 字符串转为数值
  • func Long2IPString(i uint) (string, error) Long2IPString 把数值转为 ip 字符串

使用示例:

  1. package main 
  2.  
  3. import ( 
  4.     "fmt" 
  5.     "net" 
  6.     "reflect" 
  7.  
  8.     "github.com/thinkeridea/go-extend/exnet" 

  9.  
  10. func main() { 
  11.     ip := "192.168.1.1" 
  12.  
  13.     n, _ := exnet.IPString2Long(ip) 
  14.     s, _ := exnet.Long2IPString(n) 
  15.  
  16.     fmt.Println(n, s == ip) 
  17.  
  18.     Ip1 := net.ParseIP(ip) // 会得到一个16字节的byte,主要为了兼容ipv6 
  19.     n, _ = exnet.IP2Long(Ip1) 
  20.  
  21.     Ip2, _ := exnet.Long2IP(n) 
  22.  
  23.     fmt.Println(n, reflect.DeepEqual(Ip1[12:], Ip2)) 

那么是如何将点分十进制的IP地址转为数字?

IPv4 地址有4个字节,样式如下:

  • MSB————–LSB
  • b4 b3 b2 b1

每个字节表示的范围:

  • byte4: 4294967296(1<<32)
  • byte3: 16777216(1<<24)
  • byte2: 65536(1<<16)
  • byte1: 256(1<<8)

通用公式:b4<<24 | b3<<16 | b2<<16 | b1

例如,222.173.108.86

转换方法:222<<24 | 173<<16 | 108<<8 | 86 = 3735907414

再例如,1.0.1.1

转换方法:1<<24 | 0<<16 | 1<<8 | 1 = 16777473

exnet 中实现如下:

  1. // IPString2Long ip字符串转为数值 
  2. func IPString2Long(ip string) (uint, error) { 
  3.     b := net.ParseIP(ip).To4() 
  4.     if b == nil { 
  5.         return 0, errors.New("invalid ipv4 format"
  6.     } 
  7.  
  8.     return uint(b[3]) | uint(b[2])<<8 | uint(b[1])<<16 | uint(b[0])<<24, nil 

把数值转换为字符串的逻辑翻转过来即可, exnet 中实现如下:

  1. // Long2IPString 把数值转为ip字符串 
  2. func Long2IPString(i uint) (string, error) { 
  3.     if i > math.MaxUint32 { 
  4.         return "", errors.New("beyond the scope of ipv4"
  5.     } 
  6.  
  7.     ip := make(net.IP, net.IPv4len) 
  8.     ip[0] = byte(i >> 24) 
  9.     ip[1] = byte(i >> 16) 
  10.     ip[2] = byte(i >> 8) 
  11.     ip[3] = byte(i) 
  12.  
  13.     return ip.String(), nil 

 

咨询热线
15601064618

国际VPN

扫码立即获取

图片展示

© 2015-2017 www.bjitwx.com 京ICP备06011561号  北京艾锑无限科技发展有限公司 北京朝阳区酒仙桥路2号798艺术区音响南路A01座