登录
首页 >  Golang >  Go问答

将 uintptr 类型转换为 *string 的方法详解

来源:stackoverflow

时间:2024-02-05 23:39:22 283浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《将 uintptr 类型转换为 *string 的方法详解》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我正在尝试从 uintptr*string 进行转换,但到目前为止似乎不起作用。我得到的值为 uintptr 并需要将其作为 *string 传递。 我正在使用的值代表文件目录中的地址

这是我迄今为止尝试过的:

如果 x 是 uintptr y 是 *string

y = 字符串(x)

不能在赋值中使用 string(x) (字符串类型的值)作为 *string 类型

y = *字符串(x)

不能间接 string(x) (字符串类型的值)

*y = 字符串(x)

从 uintptr 到 string 的转换会产生一个由一个符文组成的字符串,而不是一串数字(您是指 fmt.Sprint(x) 吗?)


正确答案


您必须使用 unsafe.pointeruintptr 转换为 go 指针值。

Example

import (
    "fmt"
    "unsafe"
)

func main() {
    var s *string
    var p uintptr = 1

    s = (*string)(unsafe.pointer(p))
    fmt.println(s)
}

输出:

0x1

阅读 unsafe 特别是 unsafe.Pointer 的文档以确保正确使用。

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

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

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

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

[...]

终于介绍完啦!小伙伴们,这篇关于《将 uintptr 类型转换为 *string 的方法详解》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>