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这是一个很好的问题,但让我们说我曾经站在黑暗面上。