首页 > 解决方案 > 指向存储在字符串 c++ 中的十六进制

问题描述

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

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-values 不能改变,但不知何故我需要弄清楚如何操纵传入的 len 的值。如果我在字符串中有内存地址,是否可以指向该地址?如果有怎么办?如果不是那么我将如何解决这个问题?

标签: c++pointershex

解决方案


您无需绕过字符串,附加0x00到数字并不会神奇地将其变成地址。

len(converted to )的地址uint64_t是正在传递的参数,因此将其转换回指针:

auto len_address = reinterpret_cast<uint32_t*>(arg0);

然后你可以

*len_address = 5678;

推荐阅读