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("")을 사용하면 설정에 맞게 유니코드 또는 멀티 바이트 코드로 자동 변환.
TCHAR |
||||
'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 |