我在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是控制字符,你可以在这里找到。
这就是为什么你看不到任何印刷。