繁体   English   中英

将uint64转换为uint32

[英]convert uint64 to uint32

我有一个uint64变量...但我想传递它的函数只接受uint32。

我尝试使用static unsigned int ToUInt32(uint64 variable); 引用MSDN,但它给出了精度丢失的错误。

有没有办法将uint64转换为uint32而不丢失任何数据?

不能。你不能将2加仑的水装入一加仑的容器中,而且你不能将64位数据装入32位值。

好好想想你想要做什么。 你正在拿一个可能需要64位然后减半的数字。 当然,在这种情况下你会丢失数据。

如果你确定给出的数字不会大于uint32那么你可以试试这个

uint64 largeNumber = 9876543210;
uint32 smallNumber = largeNumber & 0xFFFFFFFF;

但如果它超过32位,这将失去你的一半数量。

不是.32位整数比64位整数小32位。 64位整数可以包含32位整数的任何内容,但反之亦然。

有没有办法将uint64转换为uint32而不丢失任何数据?

是的,但前提是您知道可能的uint64值的某些特征,并且这些特征允许无损转换。

这里最有可能的是知道你的值永远不会超过uint32的最大值。 在这种情况下,您实际拥有的是以64位存储的32位值,转换只是更改它的存储方式而不是更改值。 要在这种情况下进行转换,只需转换它,例如使用static_cast。

如果你想处理任意uint64值,那么这根本不可能。 如果可能,您可以通过重复应用转换将任何文件(包括40 TB数据库)压缩到单个32位值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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