如果我没有指向它的指针,C ++中是否有可能获取内存中的地址内容,但我确实将地址本身作为uint_32
?
由于
修改
我正在写这些位置,并试图查看我的write()函数是否正常工作,所以我想手动从地址读取。上面提到的'内容'属于uint64_t
类型,这是我尝试过的,但这给了我一个Segmentation Fault
。
uint64_t *contents = reinterpret_cast<uint64_t*>(start_address);
cout<< hex << "Contents: " << *contents << endl;
我在这里做错了什么?
答案 0 :(得分:2)
不确定可移植性,但您可以使用reinterpret_cast<>
。 e.g。
uint_32 adrs;
int *p = reinterpret_cast<int*>(adrs); // int* should be 32-bit for portable code
答案 1 :(得分:1)
是的,但前提是地址在您的address space中(或者您在微控制器或内核空间中运行)。否则会导致seg故障。
只需将uint_32转换为int指针,然后取消引用它:
int contents = *((int*)uintAddress);
答案 2 :(得分:1)
是的,如果将此整数强制转换为指针,则可以:
SomeData value = *reinterpret_cast<SomeData*>(some_int);
但是你必须100%确定你的整数 是地址,否则可能会发生不好的事情。所以这被认为是不好的做法,通常都是黑客行为。
答案 3 :(得分:0)
您只需将其转换为指针和取消引用。
答案 4 :(得分:0)
C风格的变体:
uint_32 x = 0xc0de;
int *addr = (int*)x;
printf("Address %d contains %d", x, *addr);