就我而言,我有 2 个数据类型为*uint64和 的变量*uint32。我需要将它们转换为int数据类型。当我尝试用int()函数转换它们时,它会引发这样的错误:无法将 *uint64 类型的表达式转换为 int 类型。我注意到,int()如果数据类型没有字符,相同的函数可以正常工作* (asterisk)。所以我的问题是如何正确地将数据类型转换*uint64为*uint32数据int类型?!
2 回答
catspeake
TA贡献1111条经验 获得超0个赞
您不能(不应该)将指针转换为int,您最可能想要做的是将指向的值转换为int。
因此,只需取消引用指针即可获取uint64anduint32值,您可以将其转换:
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 位,并且某些正输入数可能会变成负数。
杨__羊羊
TA贡献1943条经验 获得超7个赞
[H]ow 正确地将 *uint64 和 *uint32 数据类型转换为 int 数据类型?!
像这样
var a = int64(123)
var pa *uint64 = &a
var i = int(uintptr(unsafe.Pointer(&a)))
但请注意,虽然这是将 *uint64 转换为 int 的“最正确的方法”,但这几乎肯定不是您想要做的。你应该做什么:学习语言及其类型系统,并尝试理解指针值是什么。
(请注意“最正确”,因为没有正确的方法来执行您所要求的操作。)
- 2 回答
- 0 关注
- 223 浏览
添加回答
举报
0/150
提交
取消