Golang은 네트워크 프로그래밍 작업을 단순화하도록 설계된 효율적이고 강력한 프로그래밍 언어입니다. 네트워크 프로그래밍에서는 더 빠른 데이터 처리를 위해 IP 주소를 숫자로 변환해야 하는 경우가 많습니다. 이 기사에서는 Golang을 사용하여 IP를 숫자로 변환하는 방법을 소개합니다.
IP 주소는 인터넷에서 장치를 식별하는 데 사용되는 인터넷 프로토콜 주소입니다. 일반적으로 4개의 십진수(0~255)로 표시되며 각 숫자는 점 구분 기호 "."로 구분됩니다. 예를 들어 192.168.1.1은 IP 주소입니다.
숫자는 숫자 값을 나타내는 기호 시스템입니다. 컴퓨터에서 숫자는 0과 1로 구성된 이진수로 표현됩니다. 네트워크 프로그래밍에서 숫자는 일반적으로 IP 주소를 나타내는 32비트 부호 없는 정수를 나타냅니다.
IP 주소를 숫자로 변환하는 과정은 4단계로 나눌 수 있습니다.
(1) IP 주소를 4개의 십진수로 나눕니다.
(2) 십진수를 이진수로 변환합니다. 각 십진수는 8비트 이진수에 해당합니다.
(3) 8비트 이진수 4개를 결합하여 32비트 이진수로 만듭니다.
(4) 32비트 이진수를 IP 주소에 해당하는 숫자인 십진수로 변환합니다.
다음은 이 프로세스를 구현하는 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 주소로 변환하는 작업도 4단계로 나누어야 합니다.
(1) 32- 변환 비트 부호 없는 정수를 이진수로 변환합니다.
(2) 32비트 이진수를 4개의 8비트 이진수로 나눕니다.
(3) 8비트 이진수 4개를 십진수로 변환합니다.
(4) 4개의 십진수를 하나의 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)) }
테스트를 위해 위의 두 함수를 함께 병합합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!