【发布时间】:2021-05-03 18:02:24
【问题描述】:
我有这个代表十六进制的字符串:
00000000ff00ff00000900000600020a
我正在尝试使用 net 包将其转换为 IPv6
我期待的结果是(大端):
20a:600::9:ff00:ff00::
我试过了:
ip := "00000000ff00ff00000900000600020a"
res := make(net.IP, net.IPv6len)
var err error
res,err = hex.DecodeString(ip)
if err != nil {
fmt.Println("error")
}
for i := 0; i < 16/2; i++ {
res[i], res[16-1-i] = res[16-1-i], res[i]
}
fmt.Println(res.String())
但我明白了:
a02:6:0:900:ff:ff::
谢谢!
【问题讨论】:
-
你期待的结果真的正确吗?
-
IPv6地址被重传16个字节;没有与 IPv6 地址关联的字节顺序。您期望的结果不是有效的 IPv6 地址,所以我不知道如何从给定的格式中获取它。
-
我猜你实际上是在寻找地址
20a:600:0:9:ff00:ff00::,它来自八个 16 字节组的逆序,而不是颠倒每个单独的字节。这将是非常不寻常的,因此我建议您首先验证您正在使用的数据是否正确。 -
我将预期结果固定为 20a:600::9:ff00:ff00:: 你说得对
-
20a:600::9:ff00:ff00::是一个不允许使用的保留 Ipv6 地址。所有全球 IPv6 地址都在2000::/3范围内,并且 IANA IPv6 Special-Purpose Address Registry 具有有效的特殊用途范围,但您的地址不适合任何范围。
标签: go ipv6 glide-golang