自定义std :: hex操纵器,适用于unsigned char

时间:2013-07-29 09:49:14

标签: c++ iostream

请考虑以下事项:

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;一些上面提到的值是后来流入的值的代表 - 在我们的应用程序中实际使用的情况是,有一些比这更复杂的东西,由于各种原因它是理想的,不需要在一些鞋拔特定案件的演员表。

1 个答案:

答案 0 :(得分:1)

如果要将char打印为十六进制,则需要将其转换为int:

 std::cout << std::hex << static_cast<int>('a'); 

应该做的伎俩。

std::hexchar(或unsigned char)无效的原因是char的流输出运算符被定义为将字符打印为输出。没有修改器可以改变这种行为(虽然@soon建议你自己编写类 - 这是避免演员的很多工作)。