gpt4 book ai didi

c++ - 适用于 unsigned char 的自定义 std::hex 操纵器

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:43 25 4
gpt4 key购买 nike

请考虑以下事项:

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 ' 我上面提到的是稍后要流入的值的代表 - 在我们的应用程序中的实际用例是,有一些比正在发生的事情更复杂的事情,由于各种原因,最好不必硬着头皮输入针对特定情况的一些类型转换。

最佳答案

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

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

应该可以解决问题。

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

关于c++ - 适用于 unsigned char 的自定义 std::hex 操纵器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17920836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com