본문 바로가기

IT 기술

문자 표현 방법

반응형
- SBCS(Single Byte Character Set)
1byte로 문자를 표시하는 것

- DBCS(Double Byte Character Set)
기존의 SBCS로는 다른 언어(일어, 한문 등..)을 표현하는데 한계가 있었습니다. 그래서 만들어 진 것이 바로 DBCS로 한글을 쉽게 쓸 수 있는 장점이 있지만 SBCS와 DBCS가 호환이 안되는 문제가 발생했습니다.

- MBCS(Multi Byte Charecter Set)
따라서 SBCS와 DBCS를 같이 쓰자는 개념의 MBCS가 출현했습니다. 대부분의 ASCII 코드상의 문자를 1byte로 표현하고 그 이외의 문자를 2byte로 표현합니다.

- WBCS(Wide Byte Charecter Set)
여러 byte를 써서 문자를 표현하는 것으로 MBCS 내부의 호환이 되지 않았기 때문에 출현했습니다.
대표적으로 유니코드를 들 수 있는데 모든 문자를 2byte로 표현합니다.

호환이 되지 않는다는 말에 잠시 덧붙이면,
윈도우즈 me 계열과 9x계열들은 MBCS를 사용했었습니다. 그러나 윈도우즈 2000 넘어가면서부터 WBCS를 사용하기 시작했습니다. 윈도우즈 2000 이상에서 MBCS도 사용할 수 있지만 9x계열이나 me계열에서는 WBCS를 사용할 수 없습니다. 따라서 프로그램과 운영체제간의 호환성을 위해 이를 맞춰 줄 필요가 있는 것입니다.

Visual studio 사용시 MBCS 방식 지원 방법으로 main을 사용하고 WBCS 방식 지원 방법으로 wmain을 사용합니다. 그리고 둘을 공통으로 사용하는 방식이 _tmain인데 이를 사용하기 위해서는 tchar.h를 인클루드해야 합니다.
다음은 tchar.h에서 MBCS와 WBCS를 동시에 지원하기 위한 함수를 적절히 매크로 해놓은 모습입니다.



그리고 위의 매크로를 사용하기 위한 간단한 테스트 코드입니다.

 

#define UNICODE

#define _UNICODE

 

#include<stdio.h>

#include<tchar.h>

#include<windows.h>

int _tmain(int argc, TCHAR* argv[])

{

    LPTSTR str1 = _T("MBCS or WBCS 1");

    TCHAR str2[] = _T("MBCS or WBCS 2");

    TCHAR str3[100];

    TCHAR str4[50];

    LPCTSTR pStr = str1;

    _tprintf(_T("string size : %d \n"), sizeof(str2);

    _tprintf(_T("string length : %d \n"), _tcslen(pStr));

    _fputts(_T("Input String 1 : "), stdout);

    _fscanf(_T("%s"), str3);

    _fputts(_T("Input String 2 : "), stdout);

    _tscanf(_T("%s"), str4);

    _tcscat(str3, str4);

    _tprintf(_T("String1 + String2 : %s \n"), str3);

     return 0;

}

반응형