【问题标题】:Converting a pointer to a numeric value for hashing - should I use `uintptr_t` or `intptr_t`?将指针转换为用于散列的数值 - 我应该使用 `uintptr_t` 还是 `intptr_t`?
【发布时间】:2020-03-19 22:01:55
【问题描述】:

我需要将任意指针转换为数值,以便通过哈希函数传递它。

理想情况下,只是为了踢球,我还希望数字可以转换回相同的指针。但这不是必须的。

查看 SO 和互联网后,我不清楚 uintptr_tintptr_t 是否适合这项工作。大部分地方都提到uintptr_t,但也有地方说我使用无符号类型可能会丢失原始指针的一些位。

欢迎澄清。

【问题讨论】:

  • 我认为 C 所做的假设是指针已经 一个数字(它指向的东西在内存中的地址),所以它并不需要被“转换”。你想通过散列这些来完成什么?
  • @ScottHunter 我需要将它们用作哈希表中的键。

标签: c pointers hash


【解决方案1】:

我需要将任意指针转换为数值,以便通过哈希函数传递它。

intptr_tuintptr_t 都可以。

我还希望将数字转换回相同的指针。

也可以将整数转换回指针值和backed by the C-Standard

【讨论】:

  • 是否有可能将两个不同的 void* 指针转换为相同的 uintptr_t 值?
  • @AvivCohn:可以从整数转换回原始指针值这一事实隐含地用“否”回答了您的问题。
  • 为了完整起见:转换仅被指定(并且需要定义):指针值 --> 整数 --> 指针值。 不是为整数指定的 --> 指针值 --> 整数!
猜你喜欢
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 2017-04-17
  • 2021-01-03
  • 1970-01-01
  • 2014-11-30
相关资源
最近更新 更多