将uint64_t转换为无效*并返回
Converting uint64_t to void* and back
我正在尝试以下方法将句柄转换为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 编译代码,编译器将带来错误
相关文章:
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 枚举进程模块在有效句柄上返回无效句柄
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- FFMPEG:sws_scale返回错误:切片参数 0, 2160 无效
- 自动返回类型匹配无效
- Gmock:返回无效值
- 具有引用返回类型的重写方法上的协变返回类型无效
- cppcheck 抱怨危险地使用 c_str(). c_str() 返回的值在此调用后无效
- cpp 检查抱怨危险使用 c_str(). c_str() 返回的值在本次调用后无效,如何解决?
- 对"无效的抽象返回类型"进行故障排除
- C++ 安全数组在从 c# COM dll 返回时具有无效数据
- 访问冲突投射到无效*并返回
- 将uint64_t转换为无效*并返回
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- 从模板函数返回默认构造或无效
- get 函数返回无效值
- 错误:二进制表达式('float' 和 'float')返回的无效操作数 (x & (1 << 31)) == 0
- 发布信号量返回错误 6(无效句柄)
- 获取控制权到达非无效函数警告的末尾,尽管我在 th 函数中有返回语句
- 无效 ** 等同于无效 * 返回