Maison >développement back-end >Golang >Comment convertir l'adresse IP de Golang en numéro
Golang est un langage de programmation efficace et puissant conçu pour simplifier les tâches de programmation réseau. En programmation réseau, il est souvent nécessaire de convertir les adresses IP en nombres pour accélérer le traitement des données. Cet article explique comment utiliser Golang pour convertir l'adresse IP en nombres.
Une adresse IP est une adresse de protocole Internet utilisée pour identifier un appareil sur Internet. Généralement représenté par quatre nombres décimaux (0 ~ 255), chaque nombre est séparé par le séparateur de points "." Par exemple, 192.168.1.1 est une adresse IP.
Les nombres sont un système de symboles qui représentent des valeurs numériques. Dans les ordinateurs, les nombres sont représentés en binaire, composés de 0 et de 1. Dans la programmation réseau, les nombres font généralement référence à des entiers non signés de 32 bits qui représentent des adresses IP.
Le processus de conversion d'une adresse IP en nombres peut être divisé en quatre étapes :
(1) Divisez l'adresse IP en quatre nombres décimaux.
(2) Convertissez les nombres décimaux en nombres binaires. Chaque nombre décimal correspond à un nombre binaire de 8 bits.
(3) Combinez quatre nombres binaires de 8 bits en un nombre binaire de 32 bits.
(4) Convertissez le nombre binaire de 32 bits en un nombre décimal, qui est le nombre correspondant à l'adresse IP.
Voici le code Golang pour mettre en œuvre ce processus :
package main import ( "fmt" "strconv" "strings" ) func main() { ip := "192.168.1.1" fmt.Println(ipToNum(ip)) } // IP转数字 func ipToNum(ip string) uint32 { defer func() { if err := recover(); err != nil { return } }() octets := strings.Split(ip, ".") if len(octets) != 4 { return 0 } var num uint32 for i, octet := range octets { oct, err := strconv.Atoi(octet) if err != nil { return 0 } if oct > 255 { return 0 } num |= uint32(oct) << ((3 - i) * 8) } return num }
La reconversion des nombres en adresses IP doit également être divisée en quatre étapes :
(1) Convertir 32- bit entier non signé en nombre binaire.
(2) Divisez le nombre binaire de 32 bits en quatre nombres binaires de 8 bits.
(3) Convertissez quatre nombres binaires de 8 bits en nombres décimaux.
(4) Combinez quatre nombres décimaux en une seule adresse IP.
Voici le code Golang pour implémenter ce processus :
package main import ( "fmt" "strconv" ) func main() { num := uint32(3232235777) fmt.Println(numToIp(num)) } // 数字转IP func numToIp(num uint32) string { return strconv.Itoa(int(num>>24)) + "." + strconv.Itoa(int(num>>16&0xFF)) + "." + strconv.Itoa(int(num>>8&0xFF)) + "." + strconv.Itoa(int(num&0xFF)) }
Nous fusionnons les deux fonctions ci-dessus ensemble pour les tests.
package main import ( "fmt" "strconv" "strings" ) func main() { ip := "192.168.1.1" num := uint32(3232235777) fmt.Println(ip) fmt.Println(num) fmt.Println(ipToNum(ip)) fmt.Println(numToIp(num)) fmt.Println(ipToNum(numToIp(ipToNum(ip)))) fmt.Println(numToIp(ipToNum(numToIp(num)))) } // IP转数字 func ipToNum(ip string) uint32 { defer func() { if err := recover(); err != nil { return } }() octets := strings.Split(ip, ".") if len(octets) != 4 { return 0 } var num uint32 for i, octet := range octets { oct, err := strconv.Atoi(octet) if err != nil { return 0 } if oct > 255 { return 0 } num |= uint32(oct) << ((3 - i) * 8) } return num } // 数字转IP func numToIp(num uint32) string { return strconv.Itoa(int(num>>24)) + "." + strconv.Itoa(int(num>>16&0xFF)) + "." + strconv.Itoa(int(num>>8&0xFF)) + "." + strconv.Itoa(int(num&0xFF)) }
Parce que Golang est un langage de programmation efficace et puissant, il est très adapté à la programmation réseau. Lors de la mise en œuvre de fonctions réseau, nous devons souvent convertir les adresses IP en nombres afin de traiter les données plus rapidement. Cet article explique comment utiliser Golang pour convertir des adresses IP et des numéros entre eux pour référence aux lecteurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!