[英]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
。
因此,只需取消引用指針即可獲得uint64
和uint32
值,您可以對其進行轉換:
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.