공부
C 언어 형 변환(캐스팅)시 주의할 점
Swimming_Kim
2019. 2. 4. 15:36
예를 들어서 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 |