如何将通过引用运算符获得的指针值转换为字符串?

时间:2013-04-09 07:25:27

标签: c++ string pointers type-conversion

我是C ++的初学者。我正在研究这个需要跟踪内存地址的项目。不幸的是,这个跟踪函数有以下原型声明:

void TRC(uint8_t, uint8_t, uint8_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, const char*)

现在我可以选择的选项是:

  1. 将此内存地址(指针值)转换为uint64_t类型。但是我已经读过某个不推荐的地方,因为引用运算符返回的指针值是平台相关的,并且指针转换为整数可能会返回错误的值。

  2. 将此内存地址转换为字符串并通过last参数传递。在Python中,我们有str()函数很容易。我们在C ++中也有类似的东西吗?

  3. 如果我在这里的方法/理解中推断出错了,请告诉我。

2 个答案:

答案 0 :(得分:0)

如果不需要快速代码,您可以使用流进行转换。

    #include <sstream>
    #include <iomanip>

...
    std::ostringstream os;
    os << std::hex << static_cast<void*>(my_pointer);
    TRC(..., os.str().c_str());

答案 1 :(得分:0)

你是对的,不应该将指针存储或传递为任何整数类型。

如果要将指针转换为可打印的十六进制字符串,可以使用例如std::ostringstream

std::ostringstream os;

os << std::hex << static_cast<void*>(some_pointer);

std::string str = os.str();
TRC(...,  str.c_str());