1

请考虑以下几点:

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;

所以我的问题是,如何定义 'uchar_hex_manip' 以根据需要工作?

更新:到目前为止,我感谢所有的意见和建议,但我已经说过我想避免转换价值观,似乎没有人完全承认这一点。我上面提到的 ' a << ", " << z' 代表了以后要传入的值——在我们的应用程序中,这个的实际用例是有一些比这更复杂的事情,由于各种原因,理想的情况是不必穿鞋——在某些特定情况下使用喇叭。

4

1 回答 1

1

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

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

应该做的伎俩。

(或)std::hex不起作用的原因是流输出运算符 for被定义为将字符打印为输出。没有修改器可以改变这种行为(尽管@soon 建议编写你自己的类——避免强制转换需要做很多工作)。charunsigned charchar

于 2013-07-29T10:08:16.280 回答