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。
因此,指针允许程序击败类型系统并读写任意内存。使用时应格外小心。
以下涉及指针的模式是有效的。不使用这些模式的代码很可能在今天无效或在将来变得无效。即使是下面的有效模式也有重要的警告。
[ ... ]
- 1 回答
- 0 关注
- 144 浏览
添加回答
举报
0/150
提交
取消