12

我想要C++中的printf("%2.2x", var);to等价物。 代码: cerr<<

typedef unsigned char byte;  
static byte var[10];  
for(i=1; i<10; i++)  
   printf("%2.2x", var[i]);

这个想法是将调试重定向到这样的文件:./myprog 2>out.txt.
如果我不问太多,我也希望得到解释。
谢谢!

4

4 回答 4

22

使用fprintf(stderr, ...),例如:

fprintf(stderr, "%2.2x", var[i]);
于 2013-05-29T16:32:50.463 回答
4

您可以使用 C++ 中的流操作符执行此操作,例如:

#include <iostream>
#include <iomanip>
...
std::cerr << std::hex << std::setw(2) << std::setprecision(2) << (int)var[i];

认为 setw这里是正确的,但是可以玩一下,这里列出了更多:http ://www.cplusplus.com/reference/iomanip/

于 2013-05-29T16:40:16.277 回答
3

另一种方法是使用boost::format

std::cerr << boost::format("%2.2x") % static_cast<int>(var[i]);
于 2013-05-29T16:46:01.040 回答
2
#include <iostream>
#include <iomanip>

void show_a_byte(unsigned char val) {
    std::ostream out(std::cerr.rdbuf());
    out << std::hex << std::setw(2) << std::setprecision(2)
        << static_cast<unsigned int>(val);
}

我使用了一个临时ostream共享cerr的缓冲区来确保没有一个操纵者留下不希望的副作用cerr。之所以需要,static_cast是因为当ostream获得 ( signedor unsignedor plain)char时,它认为可以将其复制为原始字节。

于 2013-05-29T16:50:38.660 回答