c++ - 如何使用 ostream 在 c++ 中将 unsigned char 打印为十六进制?

我想在 C++ 中使用无符号 8 位变量。 unsigned charuint8_t就算术而言,做这个技巧(这是预期的,因为 AFAIK uint8_t 只是 unsigned char 的别名,或者调试器呈现它。

问题是,如果我在 C++ 中使用 ostream 打印出变量,它会将其视为 char。如果我有:

unsigned char a = 0;
unsigned char b = 0xff;
cout << "a is " << hex << a <<"; b is " << hex << b << endl;

那么输出是:

a is ^@; b is 377

而不是

a is 0; b is ff

我尝试使用 uint8_t ,但正如我之前提到的,这是类型定义为 unsigned char ,所以它也是一样的。如何正确打印我的变量?

编辑:我在我的代码中的很多地方都这样做了。有什么方法可以做到这一点转换为int每次我想打印?

最佳答案

用途:

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

如果你想用前导零填充,那么:

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

由于我们使用的是 C 风格的强制转换,为什么不彻底解决终端 C++ 的错误并使用宏!

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

你可以说

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

编辑:话虽如此,MartinStettner 的解决方案要好得多!

https://stackoverflow.com/questions/673240/

相关文章:

c# - 在 C# 中格式化 double 输出

visual-studio-2010 - 我可以让 Visual Studio 将花括号与 if 语

php - 如何从 PHP 中的日期时间获取 AM/PM

python - Python中用户友好的时间格式?

perl - 快速到达 YYYY-mm-dd HH :MM:SS in Perl

java - 如何将 SimpleDateFormat 与日历一起使用?

java - 转换给定时区的日期/时间 - java

angularjs - 删除 AngularJS 货币过滤器小数/美分

c# - 如何将 double 格式设置为四舍五入到最接近的美元的货币?

python - 如何自动格式化一些 Python 代码以正确格式化?