2012-03-29 3 views
1

私のコードにはおそらく愚かなエラーがあります。私は以下の変数を定義しました:unsigned charをcoutに渡すと予期せぬ出力が発生する

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

とその他いくつかを定義しました。

コードのどこかで、gdbに構造体を印刷しようとしましたが、次のようになりました。

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

1)私はcoutを使用して出力するuEngines値をしようとしていますが、それは唯一の空白出力です:'\ F'はgdbの出力で何を意味している)

cout <<strVariable->uEngines; 

2 ?

データ型に問題がありますか?

+1

'uEngines'の値を整数または文字にしますか?数値として欲しいなら、エンジンの数が決して負ではないので、 'cout <<(int)uEngines;' – Shahbaz

+1

@softghostに 'unsigned char'が必要です。 –

+0

@softghost:その引用のソースを提供できますか? 'signed char'と' unsigned char'は、signednessが保証された2つの最小整数データ型であり、 'char'とは区別されます(例えば' signed char'、 'unsigned char'、 'char') –

答えて

3

これは空白の下のASCII文字セットで印刷できない文字の1つであるフォームフィードです。

これは、デバイスがそれをサポートしていると仮定して、どのデバイスに送信しても「ページ送り」操作を行うことを意味します。以下に示すように

12は10進値です:

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;意志出力だからです。あなたは、積分値のようにそれをしたい場合は、1にキャスト:

std::cout << (int)uEngines; 
1

両方1)と2)の答えは、それがcharだということですので、ASCII文字として解釈されています。

1)intにキャストして数値を印刷します。

cout << (int) myStruct.uEngines; 

2)これは、gdbが値を表示する方法の無害です。無視することができます。

関連する問題