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