以无符号整数存储缓冲区的地址;

时间:2013-08-31 06:24:16

标签: c++ pointers

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

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

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

因此,当我读取整数值时,它会给我一个地址。 怎么办呢?

2 个答案:

答案 0 :(得分:4)

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

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

uintptr_t variable = (uintptr_t)pointer;

答案 1 :(得分:1)

投下它:uint32_t addr = (uint32_t)_buff;

你应该有充分的理由这样做,原因有两个:

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

  2. 它损害了代码的可读性。正是出于这个原因,存在指针 - 存储(和操纵)地址。

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