首页  >  文章  >  后端开发  >  如何安全地将 void* 指针转换为 C 中的整数?

如何安全地将 void* 指针转换为 C 中的整数?

Patricia Arquette
Patricia Arquette原创
2024-11-12 10:52:02647浏览

How can I safely convert a void* pointer to an integer in C  ?

将指针转换为整数

在需要将 void* 参数转换为合适的类型的情况下,至关重要的是确保不同机器架构之间的兼容性。

在 64 位机器上,将 void* 转换为 int 可能会导致精度损失。为了解决这个问题,现代 C 方法涉及使用reinterpret_cast<:uintptr_t>。这确保了可移植且高效的转换。

正确的整数类型:

要将指针正确存储为整数,适当的类型是 uintptr_t 或 intptr_t,在 < 中定义;stdint.h>对于 C99 或 C 11 的 std 命名空间。

  • C 11(及以后):std::uintptr_t
  • C 03:uintptr_t(如果需要,用 extern "C" { 包装) })
  • C99: uintptr_t

正确的转换运算符:

在 C 中,reinterpret_cast 是指针转换的首选转换。避免使用 C 类型。

示例:

#include <cstdint>

void *p;
std::uintptr_t i = reinterpret_cast<std::uintptr_t>(p);

相关问题:

  • 什么是uintptr_t 数据类型?

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

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