2 回答

TA貢獻(xiàn)1111條經(jīng)驗 獲得超0個贊
您不能(不應(yīng)該)將指針轉(zhuǎn)換為int,您最可能想要做的是將指向的值轉(zhuǎn)換為int。
因此,只需取消引用指針即可獲取uint64anduint32值,您可以將其轉(zhuǎn)換:
var i *uint64 = new(uint64)
var j *uint32 = new(uint32)
*i = 1
*j = 2
var k, l int
k = int(*i)
l = int(*j)
fmt.Println(k, l)
輸出(在Go Playground上嘗試):
1 2
請注意,當(dāng)然,如果指針是nil
,嘗試取消引用它(如*i
)會導(dǎo)致運行時恐慌。
另請注意,大?。ㄒ约坝行Х秶?code>int取決于平臺,可能是 64 位和 32 位。因此,將任何uint64
值轉(zhuǎn)換為int
可能會丟失高 32 位,并且某些正輸入數(shù)可能會變成負(fù)數(shù)。

TA貢獻(xiàn)1943條經(jīng)驗 獲得超7個贊
[H]ow 正確地將 *uint64 和 *uint32 數(shù)據(jù)類型轉(zhuǎn)換為 int 數(shù)據(jù)類型?!
像這樣
var a = int64(123)
var pa *uint64 = &a
var i = int(uintptr(unsafe.Pointer(&a)))
但請注意,雖然這是將 *uint64 轉(zhuǎn)換為 int 的“最正確的方法”,但這幾乎肯定不是您想要做的。你應(yīng)該做什么:學(xué)習(xí)語言及其類型系統(tǒng),并嘗試?yán)斫庵羔樦凳鞘裁础?/p>
(請注意“最正確”,因為沒有正確的方法來執(zhí)行您所要求的操作。)
- 2 回答
- 0 關(guān)注
- 277 瀏覽
添加回答
舉報