簡體   English   中英

如何將 *uint64 和 *uint32 數據類型轉換為 int 數據類型?

[英]How convert *uint64 and *uint32 data types to the int data type?

就我而言,我有 2 個數據類型為*uint64*uint32變量。 我需要將它們轉換為int數據類型。

當我嘗試用int()函數轉換它們時,它會引發這樣的錯誤:

無法將 *uint64 類型的表達式轉換為 int 類型。

我注意到如果數據類型沒有* (asterisk)字符,則相同的int()函數可以正常工作。

所以我的問題是如何正確地將*uint64*uint32數據類型轉換為int數據類型?!

您不能(不應該)將指針轉換為int ,您最有可能想要做的是將指向的值轉換為int

因此,只需取消引用指針即可獲得uint64uint32值,您可以對其進行轉換:

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

請注意,當然,如果指針為nil ,則嘗試取消引用它(如*i )會導致運行時恐慌。

另請注意, int的大小(以及有效范圍)取決於平台,它可能是 64 位和 32 位。 因此,將任何uint64值轉換為int可能會丟失高 32 位,並且某些正輸入數字可能會變成負數。

[H]如何正確地將 *uint64 和 *uint32 數據類型轉換為 int 數據類型?!

像這樣

var a = int64(123)
var pa *uint64 = &a
var i = int(uintptr(unsafe.Pointer(&a)))

但請注意,雖然這是將 *uint64 轉換為 int 的“最正確的方法”,但這幾乎肯定不是您想要做的。 你應該做什么:學習語言及其類型系統,並嘗試理解什么是指針值。

(請注意“最正確”,因為沒有正確的方法可以做到你的要求。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM