신규 블로그를 만들었습니다!

2020년 이후부터는 아래 블로그에서 활동합니다.

댓글로 질문 주셔도 확인하기 어려울 수 있습니다.

>> https://bluemiv.tistory.com/

문자셋의 종류

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 버스, 데이터 버스, 어드레스 버스, 컨트롤 버스

 

시스템 I/O 버스, 데이터 버스, 어드레스 버스, 컨트롤 버스

버스 데이터 버스 데이터를 이동하기 위한 버스 어드레스 버스 메모리 주소 이동을 위한 버스 컨트롤 버스 데이터 버스와 어드레스 버스를 제어하기 위해 필요한 컨트롤 신호를 이동하기 위한 버스 버스는 양방향..

hongku.tistory.com

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기