2
저는 IPv4와 IPv6 주소를 십진수 (39,0)로 저장하는 데이터베이스를 가지고 있습니다. Golang Net.IP를이 형식으로 변환해야합니다.Golang Net.IP에서 IPv6 (MySQL에서)을 십진수 (39,0)로 변환 하시겠습니까?
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를 가진 동일한을 시도하고있다 :
: int128는type Int128 struct {
H int64
L uint64
}
결과는 같아야을
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
}
입니다
경우를 다음과 같이 나는 IPv4를 위해 일을했다42540578165168461141553663388954918914
from IPv6 주소 :
2001:470:0:76::2
고마워요!
편집, 답변 : 이동 너트 #이 대답은 다음과 같다의 사람들에게 감사 : IPv6에 대한
func ipv6ToInt(IPv6Addr net.IP) *big.Int {
IPv6Int := big.NewInt(0)
IPv6Int.SetBytes(IPv6Addr)
return IPv6Int
}
같은 작품, 단지 IP.To4을() 첫째. 이동 너트 #이 대답은 다음과 같다의 사람들에게
답변으로 추가하고 표시해야합니다. – OneOfOne