我有一个内存缓冲区,其地址我想存储在无符号整数值中。
uint8_t* _buff = new uint8_t[1024];
uint64_t* _base_addr = (uint64_t *)_buff;
我希望_buff或_base_addr指向的位置地址(无论如何它是相同的位置)存储在uint32_t值中。
因此,当我读取整数值时,它会给我一个地址。 怎么办呢?
答案 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;
你应该有充分的理由这样做,原因有两个:
它不可移植,甚至可能出错 - 地址大小在不同系统之间有所不同,通常(但不限于)它将是32位或64位。
它损害了代码的可读性。正是出于这个原因,存在指针 - 存储(和操纵)地址。
当您需要操作映射到内存的HW设备时,您可能希望将地址存储为整数。在这种情况下,您需要非常了解自己在做什么。