我的代码中可能存在一个愚蠢的错误。我定义了以下变量:
unsigned char uEngines;
unsigned short uActiveEngines
unsigned short uDed
....
和其他一些人。
在代码的其他地方,我尝试在gdb中打印结构并获得以下内容。
$6 = {uEngines = 12 '\f', uActiveEngines = 4095 .....
1)我正在尝试使用uEngines
输出cout
值,但它只输出一个空格:
cout <<strVariable->uEngines;
2)gdb输出中'\ f'的含义是什么?
我的数据类型有问题吗?
答案 0 :(得分:4)
这是一个换页,是空格下方ASCII字符集中不可打印的字符之一。
它意味着在您发送给它的任何设备上执行“页面提前”操作,假设设备支持它。
12
是十进制值,如下所示:
Char Dec Hex Control Action
---- --- --- --------------
NUL 0 0 Null character
SOH 1 1 Start of heading, = console interrupt
STX 2 2 Start of text, maintenance mode on HP console
ETX 3 3 End of text
EOT 4 4 End of transmission, not the same as ETB
ENQ 5 5 Enquiry, goes with ACK; old HP flow control
ACK 6 6 Acknowledge, clears ENQ logon hand
BEL 7 7 Bell, rings the bell...
BS 8 8 Backspace, works on HP terminals/computers
HT 9 9 Horizontal tab, move to next tab stop
LF 10 a Line Feed
VT 11 b Vertical tab
FF 12 c Form Feed, page eject
CR 13 d Carriage Return
:
:
因为它是char
,std::cout << uEngines;
会将其输出为字符而不是整数值。如果你想把它作为整数值,把它投到一个:
std::cout << (int)uEngines;
答案 1 :(得分:1)
1)和2)的答案是它是char
,所以它被解释为ASCII字符。
1)将其投射到int
以打印数值。
cout << (int) myStruct.uEngines;
2)这是gdb如何显示值的无害怪癖,可以忽略。