将表示十六进制数的字符串转换为 ipv6

问题描述

我有这个代表十六进制的字符串:

00000000ff00ff00000900000600020a

我正在尝试使用网络包将其转换为 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::

谢谢!

解决方法

试试这个:

for i := 0; i < 16/2; i += 2 {
    res[i],res[16-2-i] = res[16-2-i],res[i]
    res[i+1],res[16-1-i] = res[16-1-i],res[i+1]
}

字节是成对的,所以你需要同时翻转两个