如何从c字符串中提取地址

如何从c字符串中提取地址,c,pointers,char,memory-address,gdbserver,C,Pointers,Char,Memory Address,Gdbserver,我正在写我的程序,我需要从c字符串中获取一个指针。例如,我有一个类似“0x3b021e01”的字符串,作为输出,我需要一个合法指针void*ptr==0x3021e101 我尝试过这种方法: char *addr = "0x3021e101"; // this address is just an example of 32-bit addr uint32_t iaddr = from_ch_to_hex(addr); // iaddr == 0x3021e101 void *data_bu

我正在写我的程序,我需要从c字符串中获取一个指针。例如,我有一个类似“0x3b021e01”的字符串,作为输出,我需要一个合法指针void*ptr==0x3021e101

我尝试过这种方法:

char *addr = "0x3021e101"; // this address is just an example of 32-bit addr

uint32_t iaddr = from_ch_to_hex(addr); // iaddr == 0x3021e101

void *data_buf = (void *)iaddr; // data_buf = 0x3021e101

uint32_t reg_val = *(uint32_t *)data_buf;

但我有错。这里怎么了?如何修复它?

0x3b021e101是一个奇数,因此可能会出现对齐错误

顺便说一下,除非你通过其他方式知道地址是有效的, 如果有一个指向那个地址的指针,为什么不直接使用它呢
指针?

嗯,这是合法的uint32\t地址吗?它看起来不对-对齐错误。等等-地址超过32位。这是一个64位的指针吗?末端额外的“01”是干什么的?好了,现在更清楚了。您的体系结构和/或内存管理器是否支持对非对齐内存地址的访问?更有趣的是,这段代码是在调试器服务器上运行还是在远程客户端上运行?