将uint64转换为uint32

时间:2011-02-07 05:45:34

标签: c++

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

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

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

4 个答案:

答案 0 :(得分:7)

没有。您不能将2加仑的水装入一加仑的容器中,并且您无法将64位数据装入32位值。

答案 1 :(得分:6)

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

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

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

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

  

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

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

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

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