为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 *uint64 和 *uint32 数据类型转换为 int 数据类型?

如何将 *uint64 和 *uint32 数据类型转换为 int 数据类型?

Go
翻过高山走不出你 2022-05-23 14:54:42
就我而言,我有 2 个数据类型为*uint64和的变量*uint32。我需要将它们转换为int数据类型。当我尝试用int()函数转换它们时,它会引发这样的错误:无法将 *uint64 类型的表达式转换为 int 类型。我注意到int()如果数据类型没有* (asterisk)字符,相同的函数可以正常工作。所以我的问题是如何正确地将数据类型转换为*uint64数据类型?!*uint32int
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超7个赞

您不能(不应该)将指针转换为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 位,并且某些正输入数可能会变成负数。


查看完整回答
反对 回复 2022-05-23
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

[H]如何正确地将 *uint64 和 *uint32 数据类型转换为 int 数据类型?!


像这样


var a = int64(123)

var pa *uint64 = &a

var i = int(uintptr(unsafe.Pointer(&a)))

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


(请注意“最正确”,因为没有正确的方法可以按照您的要求进行操作。)


查看完整回答
反对 回复 2022-05-23
  • 2 回答
  • 0 关注
  • 604 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号