C ++:如何将十六进制HANDLE转换为十进制?

时间:2014-04-11 07:24:19

标签: c++ types type-conversion

在c ++中,我从另一个函数中得到一个HANDLE类型ID,它似乎是十六进制的,我想把它转换为十进制。

HANDLE id = getCurrentID();
int decimalID = static_cast<int>( id );

但是第二行给出了这个错误:

Cannot convert from 'HANDLE' to 'int'.

这是我第一次遇到HANDLE类型。有人可以帮忙解释一下吗?谢谢。

更新

我使用的是Windows XP和Visual Studio 2010.

3 个答案:

答案 0 :(得分:2)

Windows上的HANDLE是一个无效指针 要制作intunsigned long等),您无法使用static_cast
你需要一个reinterpret_cast

但是,任何int类型既不是十六进制也不是十进制,只是一个数字
这可以用两种方式表达......

答案 1 :(得分:2)

我猜你在Windows,因为HANDLE是一个微软通常使用的名称。

HANDLE类型是指向对象(未指定类型)的指针,并传递给其他函数以对该对象执行操作。一般来说,没有必要直接操纵它。

我不确定您为什么要将其转换为int,因为通常看起来并不常见,但您可以使用C风格的转换来执行此操作,或{{1}如另一个答案所述。

如果您想了解这些Microsoft类型名称背后的真实类型,可以查看their documentation

答案 2 :(得分:1)

HANDLE基本上是无效的*即指针类型你可以将HANDLE转换为void *然后转换为int,如果你愿意的话