我想要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
.
如果我不问太多,我也希望得到解释。
谢谢!
使用fprintf(stderr, ...)
,例如:
fprintf(stderr, "%2.2x", var[i]);
您可以使用 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/
另一种方法是使用boost::format
:
std::cerr << boost::format("%2.2x") % static_cast<int>(var[i]);
#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
or unsigned
or plain)char
时,它认为可以将其复制为原始字节。