我是C ++的初学者。我正在研究这个需要跟踪内存地址的项目。不幸的是,这个跟踪函数有以下原型声明:
void TRC(uint8_t, uint8_t, uint8_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, const char*)
现在我可以选择的选项是:
将此内存地址(指针值)转换为uint64_t
类型。但是我已经读过某个不推荐的地方,因为引用运算符返回的指针值是平台相关的,并且指针转换为整数可能会返回错误的值。
将此内存地址转换为字符串并通过last参数传递。在Python中,我们有str()
函数很容易。我们在C ++中也有类似的东西吗?
如果我在这里的方法/理解中推断出错了,请告诉我。
答案 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());