我想在C++中使用无符号8位变量。在算术方面,unsigned char
或uint8_t
都可以胜任(这是预期的,因为据我所知,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
的 typedef,所以它做了相同的事情。怎样才能正确地打印我的变量?
编辑:我在代码中的许多地方都这样做。有没有办法可以不需要每次打印时都进行int
转换?
std::cout
将类型为char
和unsigned char
的变量视为字符类型,并将它们输出为字符。要输出它们的整数值,需要将它们强制转换为int
类型。std::cout << std::setw(2) << std::setfill('0') << std::hex << (int)(unsigned char)c;
// 或者std::cout << std::setw(2) << std::setfill('0') << std::hex << (c & 0xff);
- Nuo Y