就我而言,我有2个变量,其数据类型为*uint64*uint32。我需要将它们转换为int数据类型。

当我尝试使用int()函数将其转换时,会引发以下错误:

无法将* uint64类型的表达式转换为int类型。

我注意到,如果数据类型没有int()字符,则相同的* (asterisk)函数可以正常工作。

所以我的问题是如何将*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位,并且某些正输入数可能会变成负数。

09-25 16:45
查看更多