首页 > 后端开发 > C++ > 正文

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

Mary-Kate Olsen
发布: 2024-11-11 02:56:02
原创
690 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板