首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用cout打印uint8_t

无法使用cout打印uint8_t
EN

Stack Overflow用户
提问于 2013-10-24 17:30:34
回答 7查看 105K关注 0票数 182

我有一个关于在C++中处理整数的奇怪问题。

我编写了一个简单的程序,将一个值设置为一个变量,然后打印出来,但它并没有像预期的那样工作。

我的程序只有两行代码:

代码语言:javascript
运行
复制
uint8_t aa = 5;

cout << "value is " << aa << endl;

这个程序的输出是value is

也就是说,它为aa打印空白。

当我将uint8_t更改为uint16_t时,上面的代码非常出色。

我使用的是Ubuntu 12.04(精确穿山甲),64位,我的编译器版本是:

代码语言:javascript
运行
复制
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-10-24 17:32:56

它实际上并不打印空白,但很可能是值为5的ASCII字符,它是不可打印的(或不可见的)。有许多invisible ASCII character codes,其中大多数低于值32,这实际上是空白。

您必须将aa转换为unsigned int才能输出数值,因为ostream& operator<<(ostream&, unsigned char)会尝试输出可见字符值。

代码语言:javascript
运行
复制
uint8_t aa=5;

cout << "value is " << unsigned(aa) << endl;
票数 193
EN

Stack Overflow用户

发布于 2013-10-24 17:33:12

uint8_t很可能是unsigned chartypedefostream类对unsigned char有一个特殊的重载,即它打印数字为5的字符,这是不可打印的,因此是空格。

票数 54
EN

Stack Overflow用户

发布于 2015-08-13 22:58:59

在任何原始数据类型的变量前添加一个一元+运算符将产生可打印的数值,而不是ASCII字符(对于char类型)。

代码语言:javascript
运行
复制
uint8_t aa = 5;
cout<<"value is "<< +aa <<endl; // value is 5
票数 52
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19562103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档