将unsigned char传递给cout时的意外输出

时间:2012-03-29 12:49:46

标签: c++ linux gdb

我的代码中可能存在一个愚蠢的错误。我定义了以下变量:

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'的含义是什么?

我的数据类型有问题吗?

2 个答案:

答案 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
:
:

因为它是charstd::cout << uEngines;会将其输出为字符而不是整数值。如果你想把它作为整数值,把它投到一个:

std::cout << (int)uEngines;

答案 1 :(得分:1)

1)和2)的答案是它是char,所以它被解释为ASCII字符。

1)将其投射到int以打印数值。

cout << (int) myStruct.uEngines;

2)这是gdb如何显示值的无害怪癖,可以忽略。