我有此代码(不是真的,但它描绘了图片)
uint32_t funcA(...)
{
uint32_t len = -1;
funcB((uint64_t)&len);
return len;
}
void funcB(uint64_t arg0)
{
std::stringstream ss;
ss << std::hex << arg0;
std::string res(ss.str());
std::string address = "0x00";
address.append(res);
// Now i got the exact memory address of len
// Where do i go from here?
}
函数的in值不能更改,但是我需要以某种方式找出如何处理传入的len的值。如果我在字符串中具有内存地址,则可以指向该地址?如果可以,怎么办? 如果没有,我将如何解决这个问题?
答案 0 :(得分:1)
您不需要绕过字符串,而将0x00
附加到数字上并不会神奇地将其转换为地址。
len
(转换为uint64_t
)的地址是正在传递的参数,因此将其转换回指针:
auto len_address = reinterpret_cast<uint32_t*>(arg0);
然后您可以
*len_address = 5678;
答案 1 :(得分:0)
您的下一步是将字符串转换回数字: 您可以使用strtoull
uint64_t address1 = strtoull(address.c_str(),NULL,0);
然后获取结果并分配给指针:
uint32_t* p = (uint32_t*)address1;
最后,您可以为*p
设置一个值:
*p = 0;