path.Format(_T("%s"), szBuffer); // int->cstring 변경시
MessageBox(_T("경로 입력하세요")); //메시지박스 이용시

 멀티 바이트

  • ASCII는 영어, 숫자, 부호 등 128개의 문자를 1바이트로 표현하도록 구성된 코드이다.
  • 1바이트는 8비트인데 데이터 타입이 sign인 경우 최상위 비트 1개는 부호 판별용으로 사용되어 데이터로 쓸 수 있는 나머지 7비트를 10진수로 (=2^7) 나타내면 128이다.
  • 따라서 ASCII는 1바이트만 사용하도록 만들어져서 원래는 128개의 문자만 사용할 수 있는 것이다. 그런데 한글도 써야 하고 여러 다른 문자들도 써야 하는데 1바이트는 너무 부족해서 한 바이트를 더 추가해서 통 2바이트로 문자 집합을 구성하고 멀티 바이트라고 정의하게 되었다.
  • 영어는 1바이트, 한글은 2바이트를 확보
  • ""(멀티 바이트)

유니코드

  • 유니코드는 첨부터 2바이트 문자열로 컴퓨터에서 사용하는 모든 문자를 포함하도록 만들어졌다.
  • L""(유니코드) --> 이 경우 내부 프로젝트 설정을 멀티 바이트로 바꾸면 문제가 생깁니다.
  • 문자 하나당 무조건 2바이트의 공간을 확보.

 

멀티바이트 및 유니코드 문제 해결

TEXT()/_T() 매크로 사용

결국 전처리기를 따라가면 다음과 같이 나타낸다.

#ifdef _UNICODE
 #define __T(x)      L ## x
#else
 #define __T(x)      x
#endif

ex)

MessageBox(_T("경로 입력하세요")); //메시지 박스 이용시
path.Format(_T("%s"), szBuffer); //포멧 변경시

 

CString

typedef ATL::CStringT< wchar_t, StrTraitMFC_DLL< wchar_t > > CStringW;
typedef ATL::CStringT< char, StrTraitMFC_DLL< char > > CStringA;
typedef ATL::CStringT< TCHAR, StrTraitMFC_DLL< TCHAR > > CString;

TCHAR라는 타입은 프로젝트 설정에 의존적인 타입이고, CStringW, CStringA는 프로젝트 설정에 상관없이 한 가지 문자 타입을 사용하는 것

보통 사용할 때는 CString을 사용하는 것이 좋음.

특정 라이브러리를 사용할때 해당 라이브러리가 특정 문자열을 지원한다고 하면 선택적으로 CStringW, CStringA 사용.

CString str_T("asdfg"); // 프로젝트 설정에 알맞은 문자열이 타입이 될 것임

 

 

__ttoi  : CString->int함수

 

 

 

기본 string

  • wstring(유니코드)
  • wchar_t src [] = L"asdf" ; 앞에 L을 써주면 유니코드화로 변환
  • TCHAR src[] = _T("sdf"); : _T("")을 사용하면 설정에 맞게 유니코드 또는 멀티 바이트 코드로 자동 변환.
기본 유니코드      
string wstring      
char wchar
ex) wchar_t src[]=
L"ASDF" ; 
앞에 L을 써주면 유니코드화 됨.
TCHAR

 : 멀티바이트 문자, 유니코드 문자등으로 자동 변환.
ex) TCHAR src[] =
_T("asdf");
_T()를 사용하면 설정에 맞게 유니코드 또는 멀티바이트 코드로 자동으로 변환.
     
         

 

'MFC' 카테고리의 다른 글

[MFC] ProgressBar  (0) 2020.06.25
[MFC] LPSTR과 LPCTSTR  (0) 2020.06.25
[MFC] Const char* 이란  (0) 2020.06.24
[MFC] Edit Control  (0) 2020.06.24
[MFC] 응용프로그램 종류(기본옵션)  (0) 2020.06.24

+ Recent posts