我有以下变量
uint32_t Value = 0x80
0x80代表存储器中的地址,例如
// Write 2 at address 0x80
*(uint32_t*)((uint32_t)0x80) = 2;
如何将Value转换为Pointer,使其指向0x80?
uint32_t *Pointer = ?? Value;
这:
(uint32_t*)(uint32_t)Value;
返回:
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
最佳答案
要处理整数到对象指针的转换,请使用可选的整数uintptr_t
或intptr_t
类型。函数指针是另一回事。
uintptr_t
然后将
void *
转换为所需的类型。#include <stdint.h>
uintptr_t Value = 0x80;
uint32_t *Pointer = (void *) Value;
如果0x80不是从有效的
uint32_t *
派生的,则导致未定义行为(UB)。然而,听起来OP处于具有内存映射数据位置的平台上。关于c - 如何在不触发警告的情况下将整数值转换为指针地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45220134/