Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menukar ip golang kepada nombor

Bagaimana untuk menukar ip golang kepada nombor

PHPz
PHPzasal
2023-04-24 09:10:031023semak imbas

Golang ialah bahasa pengaturcaraan yang cekap dan berkuasa yang direka untuk memudahkan tugas pengaturcaraan rangkaian. Dalam pengaturcaraan rangkaian, selalunya perlu menukar alamat IP kepada nombor untuk pemprosesan data yang lebih pantas. Artikel ini akan memperkenalkan cara menggunakan Golang untuk menukar IP kepada nombor.

  1. Konsep Alamat dan Nombor IP

Alamat IP ialah alamat Protokol Internet yang digunakan untuk mengenal pasti peranti di Internet. Biasanya diwakili oleh empat nombor perpuluhan (0~255), setiap nombor dipisahkan oleh pemisah titik "." Sebagai contoh, 192.168.1.1 ialah alamat IP.

Nombor ialah sistem simbol yang mewakili nilai berangka. Dalam komputer, nombor diwakili dalam binari, terdiri daripada 0s dan 1s. Dalam pengaturcaraan rangkaian, nombor biasanya merujuk kepada integer tidak bertanda 32-bit yang mewakili alamat IP.

  1. Langkah-langkah untuk menukar alamat IP kepada nombor

Proses menukar alamat IP kepada nombor boleh dibahagikan kepada empat langkah:

(1) Tukar IP Alamat dibahagikan kepada empat digit perpuluhan.

(2) Tukar nombor perpuluhan kepada nombor perduaan Setiap nombor perpuluhan sepadan dengan nombor perduaan 8-bit.

(3) Gabungkan empat nombor binari 8-bit menjadi nombor binari 32-bit.

(4) Tukar nombor binari 32-bit kepada nombor perpuluhan, iaitu nombor yang sepadan dengan alamat IP.

Berikut ialah kod Golang untuk melaksanakan proses ini:

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. Langkah-langkah untuk menukar nombor kepada alamat IP

Menukar nombor kembali kepada IP alamat juga memerlukan mata Terdapat empat langkah:

(1) Tukar integer tidak bertanda 32-bit kepada nombor binari.

(2) Bahagikan nombor binari 32-bit kepada empat nombor binari 8-bit.

(3) Tukar empat nombor perduaan 8-bit kepada nombor perpuluhan.

(4) Gabungkan empat nombor perpuluhan menjadi satu alamat IP.

Berikut ialah kod Golang untuk melaksanakan proses ini:

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. Kod ujian

Kami menggabungkan dua fungsi di atas bersama-sama untuk ujian.

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. Kesimpulan

Oleh kerana Golang adalah bahasa pengaturcaraan yang cekap dan berkuasa, ia sangat sesuai untuk pengaturcaraan rangkaian. Apabila melaksanakan fungsi rangkaian, kita selalunya perlu menukar alamat IP kepada nombor untuk memproses data dengan lebih pantas. Artikel ini memperkenalkan cara menggunakan Golang untuk menukar alamat IP dan nombor kepada dan dari satu sama lain untuk rujukan pembaca.

Atas ialah kandungan terperinci Bagaimana untuk menukar ip golang kepada nombor. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn