将uint64_t转换为无效*并返回

Converting uint64_t to void* and back

本文关键字:无效 返回 转换 uint64      更新时间:2023-10-16

我正在尝试以下方法将句柄转换为void*,然后按以下方式返回句柄

uint64_t hInt = 154071804376; //assume this is a valid memory location
void* hPoint = reinterpret_cast<void*>(hInt);
uint64_t hIntBack = *static_cast<uint64_t*>(hPoint); unable to recover hInt here, getting some other number 140727986249696

但是,如果我这样做,我能够恢复hInt

uint64_t hIntBack = reinterpret_cast<uint64_t>(hPoint)

我不确定我是否理解这两种方法之间的区别。

在此代码中:

uint64_t hIntBack = *static_cast<uint64_t*>(hPoint); unable to recover hInt here, getting some other number 140727986249696

您实际上是在查看内存位置的值hPoint。 这是因为您正在将其转换为uint64_t *,然后在该位置获取值。

作为旁注,虽然uint64_t适用于 64 位计算机,但执行此类操作的标准方法是使用 uintptr_t,它保证是要编译的体系结构的指针大小。如果要在非 XX 位计算机上使用 uintXX_t 编译代码,编译器将带来错误