我有一个关于在C++中处理整数的奇怪问题。
我编写了一个简单的程序,将一个值设置为一个变量,然后打印出来,但它并没有像预期的那样工作。
我的程序只有两行代码:
uint8_t aa = 5;
cout << "value is " << aa << endl;
这个程序的输出是value is
也就是说,它为aa
打印空白。
当我将uint8_t
更改为uint16_t
时,上面的代码非常出色。
我使用的是Ubuntu 12.04(精确穿山甲),64位,我的编译器版本是:
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
发布于 2013-10-24 17:32:56
它实际上并不打印空白,但很可能是值为5的ASCII字符,它是不可打印的(或不可见的)。有许多invisible ASCII character codes,其中大多数低于值32,这实际上是空白。
您必须将aa
转换为unsigned int
才能输出数值,因为ostream& operator<<(ostream&, unsigned char)
会尝试输出可见字符值。
uint8_t aa=5;
cout << "value is " << unsigned(aa) << endl;
发布于 2013-10-24 17:33:12
uint8_t
很可能是unsigned char
的typedef
。ostream
类对unsigned char
有一个特殊的重载,即它打印数字为5的字符,这是不可打印的,因此是空格。
发布于 2015-08-13 22:58:59
在任何原始数据类型的变量前添加一个一元+运算符将产生可打印的数值,而不是ASCII字符(对于char类型)。
uint8_t aa = 5;
cout<<"value is "<< +aa <<endl; // value is 5
https://stackoverflow.com/questions/19562103
复制相似问题