C ++结构数据成员

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

struct testing{ uint8_t a; uint16_t b; char c; int8_t d; }; testing t; ta = 1; tb = 6; tc = 'c'; td = 4; cout << "Value of ta >>" << ta << endl; cout << "Value of tb >>" << tb << endl; cout << "Value of tc >>" << tc << endl; cout << "Value of td >>" << td << endl; 

我的控制台上的输出是:

 Value of ta >> Value of tb >>6 Value of tc >>c Value of td >> 

这似乎是ta和td缺lessint8_t和uint8_ttypes。 为什么这样?

谢谢。

int8_t和uint8_t类型可能被定义为char和unsigned char。 流<<运算符将输出它们作为字符。 由于它们分别设置为1和4,即控制字符而不是打印字符,所以在控制台上什么也看不到。 尝试将它们设置为65和66(“A”和“B”),看看会发生什么。

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

 cout << static_cast<unsigned int>(ta) << endl; 

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

尝试:

 cout << "Value of ta >>" << static_cast<int>(ta) << endl; 

在这个 linux手册页中,int8_t和uint8_t实际上是以char形式进行typedefed的:

 typedef signed char int8_t typedef unsigned char uint8_t 

而char的值1和4是控制字符,你可以在这里找到。

这就是为什么你看不到任何印刷。