Golang is an efficient and powerful programming language designed to simplify network programming tasks. In network programming, it is often necessary to convert IP addresses into numbers for faster data processing. This article will introduce how to use Golang to convert IP to numbers.
An IP address is an Internet Protocol address that is used to identify a device on the Internet. Usually represented by four decimal numbers (0~255), each number is separated by the dot separator "." For example, 192.168.1.1 is an IP address.
Numbers are a system of symbols that represent numerical values. In computers, numbers are represented in binary, consisting of 0s and 1s. In network programming, numbers usually refer to 32-bit unsigned integers that represent IP addresses.
The process of converting IP address to numbers can be divided into four steps:
(1) Convert IP The address is split into four decimal digits.
(2) Convert decimal numbers to binary numbers. Each decimal number corresponds to an 8-bit binary number.
(3) Combine four 8-bit binary numbers into a 32-bit binary number.
(4) Convert the 32-bit binary number into a decimal number, which is the number corresponding to the IP address.
The following is the Golang code to implement the process:
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 }
Converting numbers back to IP addresses also needs to be divided into four Steps:
(1) Convert 32-bit unsigned integer to binary number.
(2) Divide the 32-bit binary number into four 8-bit binary numbers.
(3) Convert four 8-bit binary numbers to decimal numbers.
(4) Combine four decimal numbers into one IP address.
The following is the Golang code to implement this process:
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)) }
We merge the above two functions together for testing.
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)) }
Because Golang is an efficient and powerful programming language, it is very suitable for network programming. When implementing network functions, we often need to convert IP addresses into numbers in order to process data faster. This article introduces how to use Golang to convert IP addresses and numbers to and from each other for readers' reference.
The above is the detailed content of How to convert golang ip to number. For more information, please follow other related articles on the PHP Chinese website!