예를 들어서 11001111이라는 char 형의 데이터가 있다고 하자. 그런데 아스키 코드에 있는 영어만 사용할 것이 아니고 한글을 사용하고 싶은 경우가 있을 수 있다. 참고로 한글은 '가'라는 한 글자를 표현하기 위해서 2바이트를 필요로 하고, 이 문자가 존재하는 영역은 128을 넘어가는 범위에 있다고 한다.
그래서 한글을 쓰기 위해서는 unsigned char을 사용해야 하는데, 어쨋건 char형을 unsigned char 형으로 변환해야 하는 일이 생길 수 있다. 앞서 말한 11001111라는 char형 문자가 있다고 했을 때, 이를 int로 강제 형변환을 시키면 어떻게 될까?
11001111 -> 00000000000000000000000011001111이렇게?? 이게 아니다!!!
11111111111111111111111111001111이렇게 된다.
맨 앞에 있는 비트를 부호 비트로 인식을 하는 것이다. 그래서 char로 쓰고 있던 문자를 한글도 사용 가능하게 하기 위해서는
unsigned char로 캐스팅을 해 주어야 하는 것이다.
예)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Artist* find_artist(char *name) { Artist *p = artist_directory[(unsigned char)name[0]];//first artist with initial name[0] //unsinged 로 바꿔야 하는 이유~ //00000000~ 11111111인데 //맨 앞에 1 0 이 부호를 나타낼 수도 있다. //11001111 -> 00000000000000000000000011001111이게 아님 //11111111111111111111111111001111이렇게 된다. //그래서 unsigned char로 캐스팅을 한 것임 while (p != NULL && strcmp(p->name, name) < 0) p = p->next; if (p != NULL && strcmp(p->name, name) == 0) return p; else return NULL; } | cs |
'공부' 카테고리의 다른 글
C 언어 - linked list에서 node를 추가할 때 예외처리 (0) | 2019.02.04 |
---|---|
C 언어 - 파일을 load 할 때 주의할 점 (0) | 2019.02.04 |
C 언어 프로젝트 - 하기 전에 주의해야 할 점 (0) | 2019.02.02 |
mbed os - 간단한 프로젝트 (0) | 2019.02.01 |
SLAM 공부했다 - (2) (0) | 2019.01.26 |