Разбор строки для указателя - PullRequest
4 голосов
/ 25 декабря 2010

Предположим, у меня есть адрес памяти в виде строкового представления (скажем, "0x27cd10").Как я могу преобразовать это в указатель (void *)?

т.е.

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

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

     return 0;
}

Ответы [ 3 ]

7 голосов
/ 25 декабря 2010

strtol позволяет указать основание (16 для шестнадцатеричного или 0 для автоматического определения на основе префикса 0x во входных данных) при разборе строки. Как только вы сохраните указатель в виде целого числа, просто используйте reinterpret_cast, чтобы сформировать указатель.

3 голосов
/ 21 декабря 2012
sscanf(address, "%p", (void **)&p);

Нет необходимости в strtol или reinterpret_cast (в любом случае это C ++ и не годится только в C).

0 голосов
/ 27 апреля 2019

Вы также можете сделать это следующим образом:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...