假设有一个字符串包含uint64
类型变量的地址,我们可以将此地址解析回*uint64
吗?
例如:
i := uint64(23473824)
ip := &i
str := fmt.Sprintf("%v", ip)
u, _ := strconv.ParseUint(str, 0, 64)
u
是uint64
。如何从这个值中获取指针?
答案 0 :(得分:3)
你可以用
完成 ip = (*uint64)(unsafe.Pointer(uintptr(u)))
虽然我不知道Go为您提供了这样一个指针的有效性,但我也不会想到应该使用此代码的任何用例..
答案 1 :(得分:3)
基于nos answer。
虽然技术上可行,但有理由不相信您编写的代码。垃圾收集将使用您指向的内存(使用字符串)。
查看以下代码的结果。
package main
import(
"fmt"
"strconv"
"reflect"
"unsafe"
)
func produce() string {
i := uint64(23473824)
ip := &i
str := fmt.Sprintf("%v", ip)
fmt.Println(i, ip, str)
return str
}
func main() {
str := produce()
for i := 0; i < 10; i++ {
x := make([]int, 1024*1024)
x[0] = i
}
u, _ := strconv.ParseUint(str, 0, 64)
ip := (*uint64)(unsafe.Pointer(uintptr(u)))
fmt.Println(ip,*ip, reflect.TypeOf(u)) // u is uint64, how to get pointer out of this value?
}
答案 2 :(得分:2)
它很简单:
number, err := strconv.ParseUint(string("90"), 10, 64)
然后进行一些错误检查,希望对您有所帮助。