成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

IP地址轉換:數字與字符串之間的轉換

網絡 通信技術
IP 地址庫中 IP 地址的保存格式一般有兩種,一種是點分十進制形式(192.168.1.1),另一種是數字形式(3232235777),應用中,經常需要在這兩種格式之間做轉換。

IP 地址庫中 IP 地址的保存格式一般有兩種,一種是點分十進制形式(192.168.1.1),另一種是數字形式(3232235777),應用中,經常需要在這兩種格式之間做轉換。

[[260382]]

針對這一個問題我在 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 
責任編輯:未麗燕 來源: thinkeridea博客
相關推薦

2010-07-14 16:10:37

Perl

2009-08-20 11:29:21

C#16進制字符串

2010-09-09 11:02:36

SQL函數IP

2017-06-04 15:24:31

BCD碼十進制字符串

2021-08-20 06:58:31

C++Python函數

2021-11-24 09:08:38

LeetCode字符串算法

2010-05-24 15:53:44

MySQL內置函數

2024-08-16 22:00:38

2010-10-11 15:47:46

MySQL字符串大小寫

2010-05-26 15:24:09

MySQL字符串

2010-08-30 16:37:48

DHCPIP地址

2010-09-14 14:32:02

sql server日

2016-08-10 13:13:02

Python編程編碼

2024-02-19 15:38:08

JsonPython字符串

2024-03-12 07:35:39

Python字符串列表

2010-03-30 16:45:22

Oracle 字符串

2016-12-30 13:16:51

字符串算法代碼

2021-11-29 08:49:37

字符串轉換整數

2023-03-13 07:43:51

PHP類型轉換

2011-08-22 10:59:42

SQL Server日期時間格式轉換字符串
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲免费观看视频网站 | 日本五月婷婷 | 精品久久久一区 | 天堂色网 | 黄色av网站在线免费观看 | 成人免费视频在线观看 | 亚洲成年影院 | 一区二区三区四区免费视频 | 精品视频在线观看 | 成人国产精品入口免费视频 | 久久久久久国产精品免费免费狐狸 | 色视频www在线播放国产人成 | 国产欧美一区二区三区久久 | 日韩在线一区二区三区 | 成人免费视频网站 | 国产黄色av电影 | 日韩在线免费观看视频 | 天天干天天谢 | 自拍偷拍亚洲欧美 | 国产成人久久精品一区二区三区 | 欧美一区二区三区在线观看视频 | 成人在线免费观看av | 日韩欧美电影在线 | 亚洲国产精品人人爽夜夜爽 | 国产精品美女久久久久久久久久久 | 国产精品久久久久久久久久久久冷 | 久久久高清 | 国产乱码精品一区二区三区中文 | 免费国产一区二区视频 | 视频二区 | 一级在线观看 | 91社区在线观看播放 | 在线第一页| 免费激情网站 | 亚洲欧美日韩电影 | 91精品国产91综合久久蜜臀 | 国产精品久久久久久久久久不蜜臀 | 久久99国产精品久久99果冻传媒 | 成人综合一区 | 99精品欧美一区二区蜜桃免费 | 精品欧美一区二区精品久久 |