使用 Ostream 在 C 中将无符号字符打印为十六进制
使用 ostream 以十六进制打印无符号 8 位变量(unsigned char 或 uint8_t)在 C 中,请考虑以下解决方案:
使用十六进制操纵器进行转换
在使用十六进制操纵器之前,您可以使用强制转换将 unsigned char 转换为 int:
cout << "a is " << hex << (int)a << "; b is " << hex << (int)b << endl;
使用自定义操纵器
MartinStettner 提供了一个名为 hexchar 的优雅自定义操纵器,它可以简化十六进制打印:
#include <iostream> #include <iomanip> namespace std { template<> ostream& operator<<(ostream& os, unsigned char c) { return os << setbase(16) << setfill('0') << setw(2) << (unsigned int)c; } } using namespace std; int main() { unsigned char a = 0; unsigned char b = 0xff; cout << "a is " << hexchar << a << "; b is " << hexchar << b << endl; return 0; }
这将产生所需的输出:
a is 00; b is ff
使用宏(不太首选)
作为替代方案,您可以定义一个宏来自动化该过程,尽管这在以下情况下不太惯用C:
#define HEX(x) \ setw(2) << setfill('0') << hex << (unsigned int)(x) int main() { unsigned char a = 0; unsigned char b = 0xff; cout << "a is " << HEX(a) << "; b is " << HEX(b) << endl; return 0; }
以上是如何使用 Ostream 在 C 中将无符号字符打印为十六进制?的详细内容。更多信息请关注PHP中文网其他相关文章!