将格式化的printf(c)等效于C ++中的格式化cerr

时间:2013-05-29 16:30:36

标签: c++ c printf

我希望在C ++中printf("%2.2x", var);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 个答案:

答案 0 :(得分:14)

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

fprintf(stderr, "%2.2x", var[i]);

答案 1 :(得分: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/

答案 2 :(得分:3)

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

std::cerr << boost::format("%2.2x") % static_cast<int>(var[i]);

答案 3 :(得分: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获得(signedunsigned或普通)char时,它认为它只能将其复制为原始字节。