본문 바로가기
C++ 200제/코딩 IT 정보

MFC 멀티바이트 유니코드 변환, Char <-> CString 형변환

by vicddory 2017. 2. 5.

MFC 멀티바이트에서 유니코드 변환 (c++, Char, CString) 


『기본적으로 유니코드 환경』에선 wchar_t를 사용하셔야 됩니다.




Char -> CString

1. char* to LPWSTR



1
2
3
4
5
char text[] = "something";
wchar_t wtext[20];
 
mbstowcs(wtext, text, strlen(text)+1);//Plus null
LPWSTR ptr = wtext;
cs


2. char* data -> cstring


1
(LPSTR)data
cs

3. const char * -> const CString &


1
CString str= _T("asdf");
cs


또는,


1
2
wchar_t *wszStr; 
CString str = wszStr; 
cs


4. char [] -> ATL::CStringT<BaseType,StringTraits>


1
strResult.Format(_T("%s"), psRecText->szResult);
cs


또는,


1
2
3
4
5
6
7
8
9
publicvoid ToCString(CString* outputString)
{
    if(outputString == NULL)outputString = new CString();
        outputString->Empty();
 
   for(int i=0;i<cbData;i++) {
      outputString->AppendChar(pbData[i]);
   }
}
cs



MFC 멀티바이트에서 유니코드 변환 (c++, Char, CString)MFC 멀티바이트 유니코드 변환, Char <-> CString 형변환



5. char [] -> LPCTSTR


1
LPCTSTR pszCharacterString = CA2W(pChar);
cs


6. const char [] -> const wchar_t


_T() 매크로 사용


7. const char [] -> const wchar_t *


_T() 매크로 사용



CString -> Char

1. CString -> const char *



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CString  str;           //형변환할 문자열이 저장된 CString 변수
wchar_t* wchar_str;     //첫번째 단계(CString to wchar_t*)를 위한 변수
char*    char_str;      //char* 형의 변수
int      char_str_len;  //char* 형 변수의 길이를 위한 변수
 
//1. CString to wchar_t* conversion
wchar_str = str.GetBuffer(str.GetLength());
 
//2. wchar_t* to char* conversion
//char* 형에 대한길이를 구함
char_str_len = WideCharToMultiByte(CP_ACP, 0, wchar_str, -1NULL0NULLNULL);
char_str = new char[char_str_len];  //메모리 할당
 
//wchar_t* to char* conversion
WideCharToMultiByte(CP_ACP, 0, wchar_str, -1, char_str, char_str_len, 0,0);  
cs


하지만, CString 대신 wchar_t를 주로 사용하신다면 위와 같은 에러는 가뭄에 콩나듯 발생.



MFC 멀티바이트 유니코드 변환, Char - CString 형변환MFC 멀티바이트 유니코드 변환, Char <-> CString 형변환



2. CString -> wchar_t


1
const WCHAR * pszFoo = (const WCHAR *)strFoo; 
cs


3. CString -> LPWSTR


1
(LPWSTR)(LPCWSTR)tmp;
cs



MFC 멀티바이트 유니코드[MFC 멀티바이트 -> 유니코드 변환]



4. LPTSTR -> int


  _ttoi 또는 _tstoi 매크로 사용


5. int to LPWSTR


1
2
3
CString buffer;
buffer.Format(_T("%d"), gObjComm->m_iLaserShot[i]);
m_cCalendar.SetItemText(i, 1, (LPWSTR)(LPCWSTR)buffer);
cs


 MFC 멀티바이트에서 유니코드 변환 (c++, Char, CString)

댓글