C++ 解析字符串到指针
假设我将内存地址作为字符串表示(比如“0x27cd10”)。如何将其转换为指针(void*) i、 eC++ 解析字符串到指针,c++,c,pointers,C++,C,Pointers,假设我将内存地址作为字符串表示(比如“0x27cd10”)。如何将其转换为指针(void*) i、 e strtol允许您在解析字符串时指定基数(16表示十六进制,或0表示根据输入中的0x前缀自动检测)。指针存储为整数后,只需使用reinterpret\u cast形成指针 sscanf(address, "%p", (void **)&p); 不需要Strutol或RealTytPixCube(它是C++的,而且在C中没有任何好处)。你也可以这样做: std::string adr
strtol
允许您在解析字符串时指定基数(16表示十六进制,或0表示根据输入中的0x
前缀自动检测)。指针存储为整数后,只需使用reinterpret\u cast
形成指针
sscanf(address, "%p", (void **)&p);
不需要Strutol或RealTytPixCube(它是C++的,而且在C中没有任何好处)。
你也可以这样做:
std::string adr = "0x7fff40602780";
unsigned long b = stoul(address, nullptr, 16);
int *ptr = reinterpret_cast<int*>(b);
std::string adr=“0x7fff40602780”;
无符号长b=stoul(地址,nullptr,16);
int*ptr=重新解释铸件(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);
std::string adr=“0x7fff40602780”;
无符号长b=stoul(adr,nullptr,16);
无符号长*ptr=重新解释铸件(b);
示例*converted=重新解释铸件(ptr);
我的没有从十六进制转换。很好的例子?你在编译之前就知道一些内存的地址了吗?出于好奇,你为什么要这么做?场景是什么?在这种情况下,(void**)
是重新解释演员阵容
。@MaximeGroushkinp
是void*
,因此&p
是void**
,这意味着演员阵容什么都不做。您可以使用重新解释\u cast
进行隐式\u cast
,但这太过分了。
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);