将字符串解析为指针

时间:2010-12-25 16:40:51

标签: c++ c pointers

假设我将内存地址作为字符串表示(比如说“0x27cd10”)。如何将其转换为指针(void *)?

int main() {
     const char* address = "0x29cd10";
     void* p;

     // I want p to point to address 0x29cd10 now...

     return 0;
}

3 个答案:

答案 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);