1

我有一个内存缓冲区,我想将其地址存储在一个无符号整数值中。

uint8_t* _buff = new uint8_t[1024];
uint64_t* _base_addr = (uint64_t *)_buff;

我希望将 _buff 或 _base_addr 指向的位置的地址(无论如何它是相同的位置)存储在 uint32_t 值中。

这样当我读取整数的值时,它就会给我地址。如何才能做到这一点 ?

4

2 回答 2

4

您不能将地址存储在“say”uint32_t变量中,因为地址可能不适合 - 在 64 位系统上,指针需要 64 位存储空间。uintptr_t使用C99 ( <stdint.h>) 或 C++11 ( )代替固定大小<cstdint>

要将地址存储在这样的整数变量中,请使用

uintptr_t variable = (uintptr_t)pointer;
于 2013-08-31T06:27:59.983 回答
1

只需投射它:uint32_t addr = (uint32_t)_buff;

但是,您应该有一个很好的理由这样做,原因有两个:

  1. 它不是可移植的,甚至可能是错误的——不同系统之间的地址大小不同,通常(但不限于)它将是 32 位或 64 位。

  2. 它会损害代码的可读性。正是因为这个原因而存在指针 - 存储(和操作)地址。

当您需要操作映射到内存的硬件设备时,您可能希望将地址存储为整数。在这种情况下,您需要非常清楚自己在做什么。

于 2013-08-31T06:32:47.190 回答