본문 바로가기

공부

C 언어 형 변환(캐스팅)시 주의할 점

예를 들어서 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 *= 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