Maison >développement back-end >Golang >Comment convertir l'adresse IP de Golang en numéro

Comment convertir l'adresse IP de Golang en numéro

PHPz
PHPzoriginal
2023-04-24 09:10:031079parcourir

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.

  1. Le concept d'adresses IP et de numéros

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.

  1. Étapes pour convertir une adresse IP en nombres

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
}
  1. Étapes pour convertir les nombres en adresses IP

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))
}
  1. Code de test

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))
}
  1. Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn