gpt4 book ai didi

mysql - Golang Net.IP 到 IPv6(来自 MySQL)作为 Decimal(39,0) 转换?

转载 作者:IT王子 更新时间:2023-10-29 01:11:23 57 4
gpt4 key购买 nike

我有一个数据库将 IPv4 和 IPv6 地址存储为十进制 (39,0)。我需要将 Golang Net.IP 转换为这种格式。我已经为 IPv4 完成了如下操作:

func ipv4ToInt(IPv4Addr net.IP) int64 {
bits := strings.Split(IPv4Addr.String(), ".")

b0, _ := strconv.Atoi(bits[0])
b1, _ := strconv.Atoi(bits[1])
b2, _ := strconv.Atoi(bits[2])
b3, _ := strconv.Atoi(bits[3])

var sum int64

sum += int64(b0) << 24
sum += int64(b1) << 16
sum += int64(b2) << 8
sum += int64(b3)

return sum
}

我正在尝试对 IPv6 进行同样的操作:

func ipv6ToInt(IPv6Addr net.IP) Int128 {
bits := strings.Split(IPv6Addr.String(), ":")
var arr [4]int64
var arr1 [4]uint64

for i := 0; i < 4; i++ {
arr[i], _ = strconv.ParseInt(bits[i], 16, 64)

}

for i := 0; i < 4; i++ {
arr1[i], _ = strconv.ParseUint(bits[i], 16, 64)
}

int1 := arr[0]

for i := 0; i < 4; i++ {
int1 = (int1 << 16) + arr[i]
}

int2 := arr1[0]
for i := 0; i < 4; i++ {
int2 = (int2 << 16) + arr1[i]
}

var IPv6Int Int128
IPv6Int.H = int1
IPv6Int.L = int2
return IPv6Int
}

int128在哪里

type Int128 struct {
H int64
L uint64
}

结果应该是这样的:

42540578165168461141553663388954918914

来自 IPv6 地址:

2001:470:0:76::2

谢谢!

编辑,回答:感谢#go-nuts 的人,答案如下:

func ipv6ToInt(IPv6Addr net.IP) *big.Int {
IPv6Int := big.NewInt(0)
IPv6Int.SetBytes(IPv6Addr)
return IPv6Int
}

同样适用于 IPv6,只需先执行 IP.To4() 即可。

最佳答案

感谢#go-nuts 的人,答案如下:

func ipv6ToInt(IPv6Addr net.IP) *big.Int {
IPv6Int := big.NewInt(0)
IPv6Int.SetBytes(IPv6Addr)
return IPv6Int
}

同样适用于 IPv4,只需先执行 IP.To4() 即可。

关于mysql - Golang Net.IP 到 IPv6(来自 MySQL)作为 Decimal(39,0) 转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297141/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com