我希望在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
如果我不要求太多,我也想收到解释
谢谢!
答案 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
获得(signed
或unsigned
或普通)char
时,它认为它只能将其复制为原始字节。