golang:将IPv4和IPv6地址从文本格式转换为二进制格式

golang:将IPv4和IPv6地址从文本格式转换为二进制格式,go,Go,希望在4个字节内发送ipv4地址,在16个字节内发送ipv6地址-与go中的类似之处是什么 我知道,这对于IPV6地址来说很复杂 谢谢 将获取IPv4或IPv6格式的字符串并返回包含IP地址的 net.IP是您需要向大多数其他Go功能馈送的内容,例如与主机建立连接 请注意,与大多数返回错误的Go函数不同,net.ParseIP()如果字符串无法解析为IP地址,则只返回nil 您可以使用网络软件包: ` ` 或者,您可以使用strconv.Atoi()拆分IP并将每个值转换为整数,然后将每个整数

希望在4个字节内发送ipv4地址,在16个字节内发送ipv6地址-与go中的类似之处是什么

我知道,这对于IPV6地址来说很复杂

谢谢

将获取IPv4或IPv6格式的字符串并返回包含IP地址的

net.IP
是您需要向大多数其他Go功能馈送的内容,例如与主机建立连接

请注意,与大多数返回错误的Go函数不同,
net.ParseIP()
如果字符串无法解析为IP地址,则只返回
nil


您可以使用网络软件包: `

`

或者,您可以使用strconv.Atoi()拆分IP并将每个值转换为整数,然后将每个整数转换为byte()

`

`

还要注意,net.IP的底层类型是字节片,因此无论出于何种目的,它都已经是IP地址的直观二进制表示形式。对不起,我还不太清楚-如何将ipv4地址转换为类型
[4]uint8
@这有点不同。你不太可能真的需要这么做。这里的实际上下文是什么?几乎像:-需要在4 bytesthis中发送ipv4地址!对非常感谢。如果你愿意将此作为答案发布,我会将其标记为已接受的答案。(另外,您是否可以包含一个ipv6 To16()示例?)您可以将08添加到字符串插值中,以零填充:
fmt.Printf(“%08b”,net.IP.To4(a))
。%s也给了我一个警告。
struct sockaddr_in sa;
char str[INET_ADDRSTRLEN];
inet_pton(AF_INET, "192.0.2.33", &(sa.sin_addr));

struct sockaddr_in6 sa;
char str[INET6_ADDRSTRLEN];
inet_pton(AF_INET6, "2001:db8:8714:3a90::12", &(sa.sin6_addr));
a := net.ParseIP("127.0.0.1")
fmt.Printf("%b %s", net.IP.To4(a))
ipString := "127.0.0.1"

octets := strings.Split(ipString, ".")

octet0, _ := strconv.Atoi(octets[0])
octet1, _ := strconv.Atoi(octets[1])
octet2, _ := strconv.Atoi(octets[2])
octet3, _ := strconv.Atoi(octets[3])

b := [4]byte{byte(octet0),byte(octet1),byte(octet2),byte(octet3)}

fmt.Printf("%s has 4-byte representation of %b\n", ipString, b)