繁体   English   中英

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

[英]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

因此,只需取消引用指针即可获得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 位,并且某些正输入数字可能会变成负数。

[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM