为了账号安全,请及时绑定邮箱和手机立即绑定

如何将类型 uintptr 转换为 *string?

如何将类型 uintptr 转换为 *string?

Go
繁星coding 2023-03-15 13:48:51
uintptr我正在尝试进行从到 的转换, *string但到目前为止似乎还没有奏效。我将值作为 uintptr 获取,需要将其作为 *string 传递。我正在工作的值代表文件目录中的地址到目前为止,这是我尝试过的:如果 x 是 uintptr 并且 y 是 *stringy = string(x)不能在赋值中使用 string(x)(字符串类型的值)作为 *string 类型y = *string(x)不能间接 string(x)(字符串类型的值)*y = string(x)从 uintptr 到字符串的转换产生一串一个符文,而不是一串数字(你是说 fmt.Sprint(x) 吗?)
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

您必须使用unsafe.Pointer将 a 转换uintptr为 Go 指针值。


示例:


import (

    "fmt"

    "unsafe"

)


func main() {

    var s *string

    var p uintptr = 1


    s = (*string)(unsafe.Pointer(p))

    fmt.Println(s)

}

输出:

0x1

unsafe阅读和的文档unsafe.Pointer以确保正确使用。

指针表示指向任意类型的指针。有四种特殊操作可用于 Pointer 类型,而其他类型则不可用:

  • 任何类型的指针值都可以转换为指针。

  • 指针可以转换为任何类型的指针值。

  • uintptr 可以转换为指针。

  • 指针可以转换为 uintptr。

因此,指针允许程序击败类型系统并读写任意内存。使用时应格外小心。

以下涉及指针的模式是有效的。不使用这些模式的代码很可能在今天无效或在将来变得无效。即使是下面的有效模式也有重要的警告。

[ ... ]


查看完整回答
反对 回复 2023-03-15
  • 1 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信