C :: 0xE0 == 224 ?
2009/03/03 10:39
어느 한 분이 게시판에 질문을 올리셨습니다.
소코반 소스중에 일부분입니다.
int ch;
ch = getch(); //키 입력
if( ch==0xE0 ) {
//실행
}
0xE0 은 십진수로 224입니다.
그러면 ch==224 랑 같으면 실행 된다는 말인가요 ㅡ.ㅡ?
『혼자 연구하는 C/C++』에 나오는 한 예제에 대한 질문이었습니다.
C에서는 문자형으로 char가 사용됩니다. char는 1byte 자료형으로 -128~127의 값을 가집니다. 그럼 여기서부터 문제가 생기지요. 0xE0은 질문에서처럼 224를 뜻하거든요. 애초에 char로 이야기를 시작하면 핀트가 어긋나버리는 겁니다. 예제에도 나와있듯이 변수 ch는 (unsigned char를 이용해도 될 것 같지만)int로 선언되어 있습니다. 4byte 자료형이죠.
getch 함수는 방향키나 펑션키를 누르는 등 문자 이외의 키를 누르면 확장키(아스키 코드 이외의 코드)를 의미하는 0xE0이나 0을 반환한다고 합니다. 여기서 getch 함수를 한 번 더 호출하면 그 확장키의 코드를 조사하도록 되어 있다는군요.
질문의 예제 같은 경우는 방향키를 입력받는지 (메뉴에 이용되는)문자를 입력받는지 조사하는데, 0xEO을 조사한 후에 한 번 더 getch 함수를 호출하고 있습니다. 만약 0xE0이나 0을 조사하지 않고 getch 함수도 한 번 더 호출하지 않는다면, 방향키를 누르는 순간 K, M, H, P가 입력될 것입니다. 각각 Left, Right, Up, Down 을 뜻하는 75, 77, 72, 80과 충돌하죠.
그리고 0xE0 값은 아스키코드와 유니코드 사이에 변환할 때 이용되기도 합니다.
참고로 getch 함수가 포함되는 conio.h 파일은 ANSI C 표준에는 없는 것입니다. 즉, gcc에선 별도의 라이브러리를 이용하지 않는한 getch 함수는 못 쓰죠. 다만, stdio.h 파일에 getc 함수나 getchar 함수가 있습니다.
참고 문헌
입출력 함수 getch() :: http://itedu.tistory.com/entry/%ec%9e% ··· 98-getch"0x08 과거의 글모음 / 내 머리 속의 노트" 분류의 다른 글
| 블로그(텍스트큐브) 서버를 직접 만들어보기 - OS & Package 설치 | 2011/02/16 |
| C/Linux :: 리눅스에서 파일 덤프... dump.c | 2010/12/05 |
| C/Linux :: ls -l 을 수행하는 ll.c | 2010/10/30 |
| python :: Socket Communication with Thread | 2010/10/10 |
| 리눅스(우분투)에서 부경대학교 무선랜 접속하기 | 2010/07/19 |
Trackback Address:http://hisjournal.net/blog/trackback/180