簡體   English   中英

在 golang 中將字符串轉換為 *uint64

[英]Convert string to *uint64 in golang

假設有一個字符串保存uint64類型變量的地址,我們可以將此地址解析回*uint64嗎?

例如:

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

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

uuint64 如何從這個值中取出指針?

游樂場鏈接: https : //play.golang.org/p/1KXFQcozRk

它很簡單:

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

然后做一些錯誤檢查,希望它有幫助。

你可以用

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

游樂場鏈接

盡管我不知道 Go 為您提供了關於此類指針有效性的什么保證,但我也想不出應該使用此代碼的任何用例。

基於nos 答案

盡管在技術上是可能的,但有理由不信任您編寫的代碼。 垃圾收集將使用您指向的內存(帶字符串)。

看看下面代碼的結果。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM