将指针转换为整数以实现 64 位兼容性
现有的代码库最初是为 32 位机器设计的,使用了一个函数随后在函数中转换为适当类型的 void* 参数:
void function(MESSAGE_ID id, void* param) { if(id == FOO) { int real_param = (int)param; // ... } }
将此代码适应 64 位环境时,编译器会标记错误:
error: cast from 'void*' to 'int' loses precision
为了解决这个问题,需要进行修改以保持与 32 位机器的兼容性。
解决方案
对于现代 C 方法,reinterpret_cast<:uintptr_t> ;作为理想的转换机制。代码转换如下:
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
指针存储的正确整数类型
将指针存储为整数的推荐数据类型是 uintptr_t 或 intptr_t。这些类型位于
适当的转换运算符
在 C 中,reinterpret_cast 是此转换的首选转换机制。它取代了 C 风格的强制转换运算符,后者在 C 中不再受到青睐。
以上是如何安全地将指针转换为整数以实现 64 位兼容性?的详细内容。更多信息请关注PHP中文网其他相关文章!