首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++结构数据成员

C++结构数据成员
EN

Stack Overflow用户
提问于 2010-11-18 19:25:10
回答 3查看 513关注 0票数 5

我在C++,Linux中工作,我遇到了如下问题:

代码语言:javascript
复制
struct testing{
uint8_t a;
uint16_t b;
char c;
int8_t d;

};

testing t;

t.a = 1;
t.b = 6;
t.c = 'c';
t.d = 4;
cout << "Value of t.a >>" << t.a << endl;
cout << "Value of t.b >>" << t.b << endl;
cout << "Value of t.c >>" << t.c << endl;
cout << "Value of t.d >>" << t.d << endl;

我的控制台上的输出是:

代码语言:javascript
复制
Value of t.a >>
Value of t.b >>6
Value of t.c >>c
Value of t.d >>

对于int8_t和uint8_t类型,似乎缺少t.a和t.d。为甚麽呢?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-18 19:31:08

int8_t和uint8_t类型可能定义为char和unsigned char。流<<操作符将把它们输出为字符。由于它们分别设置为1和4,这是控制字符,而不是打印字符,因此在控制台上将看不到任何东西。尝试将它们设置为65和66 ('A‘和'B'),看看会发生什么。

EDIT:要打印出数值而不是字符,您需要将它们转换为适当的类型:

代码语言:javascript
复制
cout << static_cast<unsigned int>(t.a) << endl;
票数 10
EN

Stack Overflow用户

发布于 2010-11-18 19:28:00

这是因为在选择operator<<重载时,这些变量被视为“char”类型。

尝试:

代码语言:javascript
复制
cout << "Value of t.a >>" << static_cast<int>(t.a) << endl;
票数 3
EN

Stack Overflow用户

发布于 2010-11-18 19:32:52

this linux手册页中,int8_t和uint8_t实际上被定义为字符:

代码语言:javascript
复制
typedef signed char int8_t
typedef unsigned char uint8_t

字符的值1和4是控制字符,您可以找到here

这就是为什么您看不到任何打印的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4214215

复制
相关文章

相似问题

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