登录
首页 >  Golang >  Go问答

转换 *uint64 和 *uint32 数据类型为 int 数据类型的方法

来源:stackoverflow

时间:2024-03-03 09:36:25 228浏览 收藏

本篇文章给大家分享《转换 *uint64 和 *uint32 数据类型为 int 数据类型的方法》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

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

当我尝试使用 int() 函数转换它们时,它会引发这样的错误:

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

我注意到,如果数据类型没有 *(星号) 字符,则相同的 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 位,并且某些正输入数字可能会变成负数字。

像这样

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

但请注意,虽然这是将 *uint64 转换为 int 的“最正确的方法”,但这几乎肯定不是您想要做的。你应该做什么:学习语言及其类型系统,并尝试理解指针值是什么。

(请注意“最正确的”,因为没有正确的方法来执行您所要求的操作。)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>