2012-03-29 5 views
1

내 코드에 어리석은 오류가있을 수 있습니다. 다음 변수를 정의했습니다.부호없는 문자를 전달할 때 예기치 않은 결과가

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

및 기타 몇 가지 변수를 정의했습니다.

코드의 다른 부분에서 gdb에 구조체를 인쇄하려고 시도했지만 다음을 얻었습니다.

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

1) I 출력에 cout를 사용하여 uEngines 값을 시도하고 있지만, 그것은 단지 빈 공간 출력 것 :

cout <<strVariable->uEngines; 

2) 무엇을 는 '\ F' gdb를 출력에 의미를 ?

데이터 유형에 문제가 있습니까?

+1

'uEngines'의 값을 정수 또는 문자로 사용 하시겠습니까? 숫자로 원한다면 엔진 수가 음수가 아니기 때문에'cout << (int) uEngines;' – Shahbaz

+1

@softghost'unsigned char'가 필요하다. –

+0

@softghost : 해당 인용문의 출처를 제공 할 수 있습니까? 'signed char'와'unsigned char'는 signedness가 보장되는 두 개의 최소 정수형 데이터 타입이며,'char'와는 구별됩니다 (예 : 서명 된 char, unsigned char, 'char') –

답변

3

공백 아래에있는 ASCII 문자 집합의 인쇄 할 수없는 문자 중 하나 인 양식 공급입니다.

장치가 지원하는 것으로 가정 할 때 어떤 장치로든 "페이지 진행"작업을 수행하기위한 것입니다. 그 문자가 아닌 정수 값으로 char, std::cout << uEngines;가 출력 그것의

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

이유는 아래와 같이

12은 소수점 값이다. 당신은 핵심 가치로하려면, 하나에 캐스팅 :

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

에 대한 답변 모두 1)과 2)는 char, 그래서이 ASCII 문자로 해석되고있는 점이다.

1) int으로 전송하여 숫자 값을 인쇄하십시오.

cout << (int) myStruct.uEngines; 

2) 이것은 gdb가 값을 표시하는 방법에 대한 무해한 단서이며 무시할 수 있습니다.

관련 문제