指向存储在字符串C ++中的十六进制

时间:2018-10-23 14:03:58

标签: c++ pointers hex

我有此代码(不是真的,但它描绘了图片)

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的值。如果我在字符串中具有内存地址,则可以指向该地址?如果可以,怎么办? 如果没有,我将如何解决这个问题?

2 个答案:

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