【问题标题】:Converting uint64_t to void* and back将 uint64_t 转换为 void* 并返回
【发布时间】:2018-01-21 15:26:05
【问题描述】:

我正在尝试以下方法将句柄转换为 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)

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

【问题讨论】:

标签: c++ void-pointers reinterpret-cast static-cast


【解决方案1】:

在这段代码中:

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 编译代码,编译器会报错

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 2011-10-25
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2011-01-07
    • 2013-03-08
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多