微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将表示十六进制数的字符串转换为 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]
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。