假设我将内存地址作为字符串表示(比如说“0x27cd10”)。如何将其转换为指针(void *)?
即
int main() {
const char* address = "0x29cd10";
void* p;
// I want p to point to address 0x29cd10 now...
return 0;
}
答案 0 :(得分:7)
strtol
允许您在解析字符串时指定基数(16表示十六进制,或0表示根据输入中的0x
前缀自动检测)。将指针存储为整数后,只需使用reinterpret_cast
形成指针。
答案 1 :(得分:3)
sscanf(address, "%p", (void **)&p);
不需要strtol或reinterpret_cast(无论如何都是C ++而且只有C语言没有好处。)
答案 2 :(得分:0)
您也可以这样:
std::string adr = "0x7fff40602780";
unsigned long b = stoul(address, nullptr, 16);
int *ptr = reinterpret_cast<int*>(b);
如果要将字符串地址转换为对象指针,这是另一个示例:
std::string adr= "0x7fff40602780";
unsigned long b= stoul(adr, nullptr, 16);
unsigned long *ptr = reinterpret_cast<unsigned long*>(b);
Example *converted = reinterpret_cast<Example*>(ptr);