首页  >  文章  >  后端开发  >  如何安全地将指针转换为整数以实现 64 位兼容性?

如何安全地将指针转换为整数以实现 64 位兼容性?

Susan Sarandon
Susan Sarandon原创
2024-11-17 06:06:04844浏览

How to Safely Convert Pointers to Integers for 64-Bit Compatibility?

将指针转换为整数以实现 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。这些类型位于 中。 C99 的标头和 C 11 的 std 命名空间。

适当的转换运算符

在 C 中,reinterpret_cast 是此转换的首选转换机制。它取代了 C 风格的强制转换运算符,后者在 C 中不再受到青睐。

以上是如何安全地将指针转换为整数以实现 64 位兼容性?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn