C ++ struct数据成员

时间:2010-11-18 11:25:10

标签: c++ linux

我在C ++,Linux工作,遇到以下问题:

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;

我的控制台上的输出是:

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。为什么会这样?

感谢。

3 个答案:

答案 0 :(得分:10)

int8_t和uint8_t类型可能被定义为char和unsigned char。流&lt;&lt;运算符将输出为字符。由于它们分别设置为1和4,它们是控制字符而不是打印字符,因此控制台上不会显示任何内容。尝试将它们设置为65和66('A'和'B'),看看会发生什么。

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

cout << static_cast<unsigned int>(t.a) << endl;

答案 1 :(得分:3)

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

尝试:

cout << "Value of t.a >>" << static_cast<int>(t.a) << endl;

答案 2 :(得分:2)

this linux手册页中,int8_t和uint8_t实际上是typedefed为char:

typedef signed char int8_t
typedef unsigned char uint8_t

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

这就是为什么你什么都看不见。