首页  >  文章  >  后端开发  >  如何在 C 中使用 ostream 将无符号字符打印为十六进制?

如何在 C 中使用 ostream 将无符号字符打印为十六进制?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-11 02:56:02672浏览

How to Print Unsigned Chars as Hexadecimal in C   Using ostream?

在 C 中使用 ostream 将无符号字符打印为十六进制

在 C 中,直接使用 ostream 打印无符号 8 位变量将它们视为字符,导致十六进制表示不准确。为了克服这个问题,有几种方法可用:

转换为 int

一种常见的方法是在打印之前将 unsigned char 转换为整数。这会强制 ostream 将值视为十六进制数。例如:

cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;

使用十六进制操纵器与 int

或者,您可以直接将十六进制流操纵器与整数一起使用。这会将整数转换为十六进制表示形式并将其附加到流中。例如:

cout << "a is " << hex << int(a) << "; b is " << hex << int(b) << endl;

将十六进制操纵器与 setw 和 setfill 结合使用

如果需要前导零进行填充,可以将十六进制操纵器与 setw 和 setfill 结合使用指定所需的宽度和填充字符。例如:

#include <iomanip>
...
cout << "a is " << setw(2) << setfill('0') << hex << int(a);

创建宏

您可以通过创建组合了必要的 манипуляции 的宏来简化打印过程。例如:

#define HEX( x )
   setw(2) << setfill('0') << hex << (int)( x )

使用这个宏,您可以简单地编写:

cout << "a is " << HEX( a );

MartinStettner 的解决方案

另一个优雅的解决方案是创建用于无符号字符的自定义流插入器,自动将它们打印为十六进制。有关 MartinStettner 方法的更多详细信息,请参阅原始问题和答案。

以上是如何在 C 中使用 ostream 将无符号字符打印为十六进制?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn