我想在 C++ 中使用无符号 8 位变量。 unsigned char
或 uint8_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/