String 在golang中将字符串转换为*uint64

String 在golang中将字符串转换为*uint64,string,pointers,go,uint64,String,Pointers,Go,Uint64,假设有一个字符串包含uint64类型变量的地址,我们可以将该地址解析回*uint64 例如: i := uint64(23473824) ip := &i str := fmt.Sprintf("%v", ip) u, _ := strconv.ParseUint(str, 0, 64) u是uint64。如何从该值中取出指针 操场链接:你可以用 ip = (*uint64)(unsafe.Pointer(uintptr(u))) 尽管我不知道Go如何保证这样一个指针的有效性,

假设有一个字符串包含
uint64
类型变量的地址,我们可以将该地址解析回
*uint64

例如:

i := uint64(23473824)
ip := &i
str := fmt.Sprintf("%v", ip)

u, _ := strconv.ParseUint(str, 0, 64)
u
uint64
。如何从该值中取出指针

操场链接:

你可以用

 ip = (*uint64)(unsafe.Pointer(uintptr(u)))

尽管我不知道Go如何保证这样一个指针的有效性,但我想不出应该在哪种情况下使用此代码。

基于

虽然从技术上讲这是可能的,但是有理由不相信您编写的代码。垃圾回收将使用您指向的内存(带字符串)

看看下面代码的结果

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?
}
主程序包
进口(
“fmt”
“strconv”
“反映”
“不安全”
)
func product()字符串{
i:=uint64(23473824)
ip:=&i
str:=fmt.Sprintf(“%v”,ip)
fmt.Println(i、ip、str)
返回str
}
func main(){
str:=product()
对于i:=0;i<10;i++{
x:=make([]整数,1024*1024)
x[0]=i
}        
u、 =strconv.ParseUint(str,0,64)
ip:=(*uint64)(不安全的指针(uintptr(u)))
fmt.Println(ip,*ip,reflect.TypeOf(u))//u是uint64,如何从这个值中取出指针?
}

它非常简单:

number, err := strconv.ParseUint(string("90"), 10, 64)

然后做一些错误检查,希望能有所帮助。

我不了解golang,但是这个页面有用吗()?这是关于施法指针的。谢谢,但不幸的是它们没有关系。但你为什么要这样做呢?@Rambatino这是一个很好的问题,但让我们说我曾经站在黑暗面上。