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

How to simulate printf's %p format when using std::cout?

本文关键字:printf 格式 模拟 cout std 使用 何模拟      更新时间:2023-10-16
unsigned char *teta = ....;
...
printf("data at %pn", teta); // prints 0xXXXXXXXX

如何使用iostream s打印变量地址?有std::吗??功能像std::hex做这种转换(地址->字符串),所以std::cout << std::??? << teta << std::endl将打印该地址?

转换为void*:

unsigned char* teta = ....;
std::cout << "data at " << static_cast<void*>(teta) << "n";

iostreams通常假定您有一个带有任何char*指针的字符串,但是void*指针只是一个地址(简化),因此iostreams除了将该地址转换为字符串之外不能做任何事情,而不是将该地址的内容转换为字符串。

根据你是否想使用printf提供的更多格式化选项,你可以考虑使用sprintf

通过它,您可以像使用printf一样格式化字符串,然后使用std::cout

将其打印出来。

但是,这将涉及到使用临时字符数组,因此选择取决于。

一个例子:

unsigned char *teta = ....;
...
char formatted[ 256 ]; //Caution with the length, there is risk of a buffer overflow
sprintf( formatted, "data at %pn", teta );
std::cout << formatted;