신규 블로그를 만들었습니다!
문자셋의 종류
SBCS
1바이트 사용, 아스키코드도 SBCS 문자 형태
MBCS
한글은 2바이트, 영어는 1바이트를 사용하는 형태
WBCS
모든 문자를 2바이트로 사용, 유니코드가 WBCS 문자 형태
요즘은 컴퓨터의 사양이 좋아져서, 메모리의 크기에 대해 크게 걱정이 없다.
따라서, 용량을 줄이고자 굳이 SBCS(1바이트 문자)를 사용할 필요가 없다.
한글 또는 영어가 아닌 다른 문자를 사용하기위해서는 MBCS, WBCS를 사용할텐데,
WBCS형태로 사용하는것이 안정적이고 좋다.
즉, 유니코드 기반으로 프로그래밍 하는것이 안정적이고 좋다.
WBCS 기반 프로그래밍
C언어를 배울때 우리는 문자를 사용할때,
char를 사용했다.
WBCS 기반에서는 char 대신 wchar_t를 사용한다.
문자도
"AAA" 앞에 L을 붙여 L"AAA" 를 사용한다.
예를들면,
char str[] = "Hello";
wchar_t str[] = L"Hello";
char 말고도 다양하게 바꿔써야하는 부분이 있다.
SBCS |
WBCS |
strlen |
size_t wcslen |
strcpy |
wchar_t* wcscpy |
printf |
wprintf |
scanf |
wscanf |
당연한 얘기지만, 유니코드로 프로그래밍을 시작했으면
끝까지 유니코드로 하는 것이 좋다.
유니코드 기반, 매개변수 전달인자
main함수를 wmain으로 다르게 사용한다.
int wmain(int argc, wchar_t* argv[]){}
MBCS, WBCS 동시 지원하는 매크로
실제로는 유니코드로만 프로그래밍 할 수는 없다.
왜냐하면, 모든 사용자들이 유니코드 기반으로 된 프로그램을 사용한다고 볼 수 없기 때문이다.
그래서, MBCS, WBCS를 동시에 지원할 수 있게 프로그래밍을 해야한다.
윈도우에서는 아래와같이 동시지원 매크로를 지원해준다.
#ifdef UNICODE
typedef WCHAR TCHAR;
...생략...
#else
typedef CHAR TCHAR;
...생략...
#endif
즉, 유니코드일때는 TCHAR = WCHAR = wchar_t
유니코드가 아닐때는 TCHAR = CHAR = char
똑같이 TCHAR를 이용해서 프로그래밍을 해도,
MBCS일때와 WBCS일때 자료형을 다르게 사용할 수 있다.
관련 글
2018/05/10 - [System/System programing] - 시스템 I/O 버스, 데이터 버스, 어드레스 버스, 컨트롤 버스
'System > System programing' 카테고리의 다른 글
시스템 I/O 버스, 데이터 버스, 어드레스 버스, 컨트롤 버스 (3) | 2018.05.10 |
---|---|
프로그램이 생성 및 실행되는 순서, 컴퓨터 구조 (4) | 2018.05.10 |
전체적인 시스템, 시스템 프로그래밍을 하기 위해 알아야 할 것 (4) | 2018.05.10 |
최근댓글