第一步是使用 net.ParseIP 判断字符串是否是合法的 IPv4 地址。如果合法,net.ParseIP 会将其转换成字符数组([]byte)。
第二步是使用 binary.Read 方法将上面的字符数组以大端对齐的方式写入 ret 变量中。
func InetAddr(ipaddr string) uint32 {
var ret uint32
ip := net.ParseIP(ipaddr)
if ip == nil {
return 0
}
if err := binary.Read(bytes.NewBuffer(ip.To4()), binary.BigEndian, &ret); err != nil {
return 0
}
return ret
}
2. 整数转字符串
整数转字符串比较简单,以一个例子来演示:
有 IPv4 地址十六进制整数表示形式为 0x01020304,将其分别移位24、16、8、0后,会得到 IP 地址字符串表示形式的 4 段:
byte(0x01020304 >> 24) = byte(0x01) = 1
byte(0x01020304 >> 16) = byte(0x0102) = 2
byte(0x01020304 >> 8) = byte(0x010203) = 3
byte(0x01020304 >> 0) = byte(0x01020304) = 4
将这四个值用 . 拼接后,即可得到字符串表式:1.2.3.4
func IPv4Uint32ToString(ip uint32) string {
return fmt.Sprintf("%d.%d.%d.%d", byte(ip>>24), byte(ip>>16), byte(ip>>8), byte(ip))
}
注意:byte 在强制转换大于其存储最大值时(0xff)时会溢出,会将左边部分丢弃。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)