如何在Golang中将字符串转换为* uint64?

假设有一个字符串保存类型变量的地址,我们可以将此地址解析成这样吗?uint64 *uint64

例如:

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

u, _ := strconv.ParseUint(str, 0, 64)

u是uint64,该如何从这个值中取出指针?

背景链接: https://play.golang.org/p/1KXFQcozRk

dongtan5555
dongtan5555 这是一个很好的问题,但是我们只能说我曾经是黑暗的一面。
一年多之前 回复
duanhan8757
duanhan8757 但是为什么要这么做呢?
2 年多之前 回复
duanbinmi8970
duanbinmi8970 谢谢,但是不幸的是它们没有关系。
5 年多之前 回复
dougua2309
dougua2309 我不懂golang,但是此页面有用吗(stackoverflow.com/questions/5367961/…)?它处理强制转换指针。
5 年多之前 回复

2个回答

Based on nos answer.

Although it is technically possible there are reasons not to trust the code you wrote. Garbage collection will use the memory you point to (with string).

Take a look at result of the following code.

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?
}

https://play.golang.org/p/85XOhsMTf3



您可以使用</ p>

  ip =(* uint64)(不安全。 指针(uintptr(u))
</ code> </ pre>

游乐场链接 </ p>

尽管我不知道Go可以为您提供这种指针的有效性的保证,我也不认为该代码应该在任何用例中 </ p>
</ div>

展开原文

原文

You can do it with

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

playground link

Albeit I don't know what guarantees Go gives you about the validity of such a pointer, nor can I think of any use case where this code should be used..

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐