반응형
Character Set 의 종류
SBCS (Single Byte Character Set)
SBCS는 문자를 표현하는데 1byte 를 사용한다.
( ASCII 가 SBCS 에 해당한다. )
MBCS (Multi Byte Character Set)
MBCS 는 문자를 표현하는데 1byte 와 2byte 를 사용한다.
(영문자, 숫자를 표현할때는 SBCS 와 같이 1byte를 사용하지만 한글, 특수기호등의 문자를
표현할때에는 2byte를 사용하여 문자를 표현한다. Windows OS에서 MBCS를 채택하고있다. )
WBCS (Wide Byte Character Set)
WBCS 는 문자를 표현하는데 2byte 를 사용한다.
( UNICODE 가 WBCS 에 해당한다. )
MBCS 로 문자를 표현하게되면 문자열의 길이는 11이지만 컴퓨터가 인식하게되는 문자열의 길이는 15 로 차이가 발생하게된다.
하지만 WBCS 인 유니코드로 문자를 표현하면 영문, 숫자, 한글 등 모든 문자가 2byte로 표현되기떄문에 컴퓨터가
인식하는 문자열의 길이와 우리가 입력한 문자열의 길이가 같게된다. ( NULL 문자 또한 2byte로 인식된다. )
모든 시스템의 환경들이 유니코드를 사용하면 좋지만 그렇지 않은 경우도 있기떄문에 우리는 MBCS 와 WBCS 모두를 준비해야된다.
하지만 MBCS 프로젝트와 WBCS 프로젝트를 따로따로 개발하는것은 비효율적이고 유지보수 비용도 많이 들게된다.
MBCS 와 WBCS 을 동시 지원하기위해선 #include <tchar.h> 를 선언해주고 프로젝트 속성 > 구성속성 > 고급 > 고급 속성 에서
문자집합을 유니코드 | 멀티바이트 문자 집합 사용 중 선택하기만 하면된다. ( Visual Studio 2019 기준 )
아래의 사진에서 사용된 소스코드는 동일하지만 선택한 문자집합에따라 MBCS 가 적용됫는지 WBCS 가 적용됫는지 확인할수있다.
SBCS & MBCS | WBCS | TCHAR | |
문자열 길이 | strlen() | wcslen() | _tcslen() |
문자열 복사 | strcpy() | wcscpy() | _tcscpy() |
strncpy() | wcsncpy() | _tcsncpy() | |
문자열 더하기 | strcat() | wcscat() | _tcscat() |
strncat() | wcsncat() | _tcsncat() | |
문자열 비교 | strcmp() | wcscmp() | _tcscmp() |
strncmp() | wcsncmp() | _tcsncmp() |
문자열 출력 | printf() | wprintf() | _tprintf() |
문자열 입력 | scanf() | wscanf() | _tscanf() |
위의 표 외에도 수많은 함수들이 있으니 MSDN 을 참고하셔서 사용하시면됩니다.
반응형