2 回答
TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
您不能(不應(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
請(qǐng)注意,當(dāng)然,如果指針是nil,嘗試取消引用它(如*i)會(huì)導(dǎo)致運(yùn)行時(shí)恐慌。
另請(qǐng)注意,大?。ㄒ约坝行Х秶?code>int取決于平臺(tái),可能是 64 位和 32 位。因此,將任何uint64值轉(zhuǎn)換為int可能會(huì)丟失高 32 位,并且某些正輸入數(shù)可能會(huì)變成負(fù)數(shù)。
TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
[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)))
但請(qǐng)注意,雖然這是將 *uint64 轉(zhuǎn)換為 int 的“最正確的方法”,但這幾乎肯定不是您想要做的。你應(yīng)該做什么:學(xué)習(xí)語言及其類型系統(tǒng),并嘗試?yán)斫庵羔樦凳鞘裁础?/p>
(請(qǐng)注意“最正確”,因?yàn)闆]有正確的方法來執(zhí)行您所要求的操作。)
- 2 回答
- 0 關(guān)注
- 342 瀏覽
添加回答
舉報(bào)
