티스토리 뷰

목차

    반응형

    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)

    반응형