Golang は、ネットワーク プログラミング タスクを簡素化するように設計された効率的で強力なプログラミング言語です。ネットワーク プログラミングでは、データ処理を高速化するために IP アドレスを数値に変換する必要があることがよくあります。この記事では、Golangを使ってIPを数値に変換する方法を紹介します。
IP アドレスは、インターネット上のデバイスを識別するために使用されるインターネット プロトコル アドレスです。通常は 4 つの 10 進数 (0 ~ 255) で表され、各数値はドット区切り文字「.」で区切られます。たとえば、192.168.1.1 は IP アドレスです。
数字は、数値を表す記号の体系です。コンピューターでは、数値は 0 と 1 からなる 2 進数で表されます。ネットワーク プログラミングでは、数値は通常、IP アドレスを表す 32 ビットの符号なし整数を指します。
IP アドレスを数値に変換するプロセスは、次の 4 つのステップに分けることができます。
(1) 変換IP アドレスは 4 桁の 10 進数に分割されます。
(2) 10 進数を 2 進数に変換します。各 10 進数は 8 ビットの 2 進数に対応します。
(3) 4 つの 8 ビット 2 進数を 32 ビット 2 進数に結合します。
(4) 32 ビットの 2 進数を、IP アドレスに対応する 10 進数に変換します。
次は、プロセスを実装するための Golang コードです:
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 }
数値を IP アドレスに戻すこともできます。
(1) 32 ビット符号なし整数を 2 進数に変換します。
(2) 32 ビット 2 進数を 4 つの 8 ビット 2 進数に分割します。
(3) 4 つの 8 ビット 2 進数を 10 進数に変換します。
(4) 4 つの 10 進数を結合して 1 つの IP アドレスにします。
次は、このプロセスを実装するための Golang コードです:
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)) }
上記の 2 つの関数をテストのためにマージします。
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)) }
Golang は効率的で強力なプログラミング言語であるため、ネットワーク プログラミングに非常に適しています。ネットワーク機能を実装するとき、データをより速く処理するために、IP アドレスを数値に変換する必要があることがよくあります。この記事では、読者の参考のために、Golang を使用して IP アドレスと番号を相互に変換する方法を紹介します。
以上がgolangのIPアドレスを数値に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。