2012-03-29 53 views
1

我的代碼中可能有一個愚蠢的錯誤。我已經定義了以下變量:將unsigned char傳給cout時意外的輸出

unsigned char uEngines; 
unsigned short uActiveEngines 
unsigned short uDed 
.... 

和其他幾個。

在代碼中的其他地方,我試圖在gdb中打印結構並得到以下結果。

$6 = {uEngines = 12 '\f', uActiveEngines = 4095 ..... 

1)我試圖輸出使用coutuEngines價值,但它只能輸出一個空格:

cout <<strVariable->uEngines; 

2)是什麼'\ F'意味着gdb的輸出?

我在做數據類型錯誤嗎?

+1

你想把'uEngines'的值作爲一個整數還是一個字符?如果你想把它作爲一個數字,你應該寫'cout <<(int)uEngines;' – Shahbaz 2012-03-29 12:52:12

+1

@softghost他需要'unsigned char',因爲引擎的數量永遠不會是負數。 – 2012-03-29 13:53:11

+0

@softghost:你能否提供該報價的來源? 'signed char'和'unsigned char'是保證簽名的兩個最小整數數據類型,它們與'char'不同(例如,你可以/應該重載所有三個'signed char','unsigned char', 'char') – 2012-03-29 14:22:53

回答

3

這是一個換頁符,它是空格下方的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)和2),這是一個char,所以它被解釋爲ASCII字符。

1)將其轉換爲int以打印數值。

cout << (int) myStruct.uEngines; 

2)這是gdb如何顯示值的無害怪癖,可以忽略。