C++ printf语句中的0x%08lx格式说明符用于cout

C++ printf语句中的0x%08lx格式说明符用于cout,c++,hex,printf,cout,C++,Hex,Printf,Cout,我有一份printf声明,如下所示: printf("Buffer A Data: 0x%08lx, Buffer B Data: 0x%08lx\n\n", (ul) bufa, (ul) bufb); 如何使用std::cout编写此语句?缓冲区变量包含大量地址。您可以使用、和修饰符: std::cout << "0x" << std::hex << std::setw(8) << std::setfill('0') << buf

我有一份printf声明,如下所示:

printf("Buffer A Data: 0x%08lx, Buffer B Data: 0x%08lx\n\n", (ul) bufa, (ul) bufb);
如何使用
std::cout
编写此语句?缓冲区变量包含大量地址。

您可以使用、和修饰符:

std::cout << "0x" << std::hex << std::setw(8) << std::setfill('0') << bufa;
您在C中所做的是(显然)将指针强制转换为无符号整数类型,然后以十六进制打印该值

但是,C++专门为指针提供了一种转换:

std::cout << "Buffer A Data: " << static_cast<void *>(bufa) 
          << ", Buffer B Data: " << static_cast<void *>(bufb) << "\n\n";

std::cout Worth说第二个变量必须重复
setw
,但其他操纵器不重复。使用printf语句的实际输出是:0x0000000111ffd000,而使用std::cout@TarangJain很好,让我更新我的答案以反映这一事实!谢谢,我在我的答案中添加了一个参考:)