1

我是 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. 将此内存地址转换为字符串并通过最后一个参数传递。在 Python 中,这很容易,因为我们有str()函数。我们在 C++ 中也有类似的东西吗?

如果我在这里的方法/理解中有错误,请告诉我。

4

2 回答 2

0

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

    #include <sstream>
    #include <iomanip>

...
    std::ostringstream os;
    os << std::hex << static_cast<void*>(my_pointer);
    TRC(..., os.str().c_str());
于 2013-04-09T07:36:25.753 回答
0

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

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

std::ostringstream os;

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

std::string str = os.str();
TRC(...,  str.c_str());
于 2013-04-09T07:36:41.837 回答