使用std :: cout时如何模拟printf的%p格式?

|
unsigned char *teta = ....;
...
printf(\"data at %p\\n\", teta); // prints 0xXXXXXXXX
如何使用
iostream
s打印变量地址?有a2吗???像
std::hex
这样的功能来进行这种转换(地址->字符串),所以
std::cout << std::??? << teta << std::endl
将打印该地址吗? (请不要使用sprintf);)     
已邀请:
强制to5ѭ:
unsigned char* teta = ....;
std::cout << \"data at \" << static_cast<void*>(teta) << \"\\n\";
iostream通常假定您有一个带有任何
char*
指针的字符串,但是
void*
指针仅是一个地址(一个简化的地址),因此iostreams除了将地址转换为字符串外,不能执行任何操作,而不是该地址的内容地址。     
根据您是否要使用printf提供的更多格式选项,可以考虑使用sprintf 通过它,您可以像对printf一样格式化字符串,然后用
std::cout
将其打印出来 但是,这将涉及使用临时char数组,因此选择取决于。 一个例子:
unsigned char *teta = ....;
...
char formatted[ 256 ]; //Caution with the length, there is risk of a buffer overflow
sprintf( formatted, \"data at %p\\n\", teta );
std::cout << formatted;
    

要回复问题请先登录注册