将指针转换为整数:针对 64 位机器重新审视
在 C/C 中,处理 64 位机器时的潜在陷阱位机在处理指针时出现。传统的转换技术,如下所示,可能会导致精度错误:
void function(MESSAGE_ID id, void* param) { if (id == FOO) { int real_param = (int)param; // ... } }
采用更新的铸造技术的解决方案
为了纠正此问题并确保在 32 位和 64 位系统上的无缝兼容性,建议使用现代 C 方法:
#includevoid *p; auto i = reinterpret_cast<:uintptr_t>(p);
选择正确的数据类型
将指针存储为整数时,选择正确的数据类型至关重要适当的数据类型。为此,uintptr_t 类型是最合适的。
// C 11 std::uintptr_t i; // C 03 extern "C" { #include} uintptr_t i; // C99 #include uintptr_t i;
使用正确的转换运算符
在 C 中,存在各种类型的转换。对于这个特定场景,reinterpret_cast是最合适的选择。
// C 11 auto i = reinterpret_cast<:uintptr_t>(p); // C 03 uintptr_t i = reinterpret_cast(p); // C uintptr_t i = (uintptr_t)p;
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3