uintptr我正在嘗試進(jìn)行從到 的轉(zhuǎn)換, *string但到目前為止似乎還沒有奏效。我將值作為 uintptr 獲取,需要將其作為 *string 傳遞。我正在工作的值代表文件目錄中的地址到目前為止,這是我嘗試過的:如果 x 是 uintptr 并且 y 是 *stringy = string(x)不能在賦值中使用 string(x)(字符串類型的值)作為 *string 類型y = *string(x)不能間接 string(x)(字符串類型的值)*y = string(x)從 uintptr 到字符串的轉(zhuǎn)換產(chǎn)生一串一個(gè)符文,而不是一串?dāng)?shù)字(你是說 fmt.Sprint(x) 嗎?)
1 回答

LEATH
TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
您必須使用unsafe.Pointer將 a 轉(zhuǎn)換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 類型,而其他類型則不可用:
任何類型的指針值都可以轉(zhuǎn)換為指針。
指針可以轉(zhuǎn)換為任何類型的指針值。
uintptr 可以轉(zhuǎn)換為指針。
指針可以轉(zhuǎn)換為 uintptr。
因此,指針允許程序擊敗類型系統(tǒng)并讀寫任意內(nèi)存。使用時(shí)應(yīng)格外小心。
以下涉及指針的模式是有效的。不使用這些模式的代碼很可能在今天無效或在將來變得無效。即使是下面的有效模式也有重要的警告。
[ ... ]
- 1 回答
- 0 關(guān)注
- 165 瀏覽
添加回答
舉報(bào)
0/150
提交
取消