请考虑以下事项:
unsigned char a(65);
unsigned char z(90);
std::cout << std::hex << a << ", " << z <<std::endl;
输出:
A, Z
但期望的输出是:
41, 5a
为了达到这个目的,我希望避免转换这样的值,比如说:
std::cout << std::hex << int(a) << ", " << int(z) <<std::endl;
而是有一些神奇的操纵者,我可以事先包括:
std::cout << uchar_hex_manip << a << ", " << z << std::endl;
所以我的问题是,如何定义&#39; uchar_hex_manip&#39;按要求工作?
更新:我感谢目前为止所有的意见和建议,但我已经说过我想避免转换价值观,而且似乎没有人完全承认这一点。 &#39; a << ", " << z
&#39;一些上面提到的值是后来流入的值的代表 - 在我们的应用程序中实际使用的情况是,有一些比这更复杂的东西,由于各种原因它是理想的,不需要在一些鞋拔特定案件的演员表。
答案 0 :(得分:1)
如果要将char
打印为十六进制,则需要将其转换为int:
std::cout << std::hex << static_cast<int>('a');
应该做的伎俩。
std::hex
对char
(或unsigned char
)无效的原因是char
的流输出运算符被定义为将字符打印为输出。没有修改器可以改变这种行为(虽然@soon建议你自己编写类 - 这是避免演员的很多工作)。