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

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

Susan Sarandon
发布: 2024-11-17 06:06:04
原创
899 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板