Programming/MFC

UNICODE <-> ANSI 변환

acidpop 2011. 11. 24. 10:45
반응형

// CString Char

char* StringToChar(CString str)

{

        char *szStr = NULL;

#if defined(UNICODE) || defined(_UNICODE)

        int nLen = str.GetLength() + 1;

        TCHAR *tszTemp = NULL;

        tszTemp = new TCHAR[nLen];

        memset(tszTemp, 0x00, nLen*sizeof(TCHAR));

        _tcscpy(tszTemp, str);

        // Get size (실제사용되는바이트사이즈)

        int nSize = WideCharToMultiByte(CP_ACP, 0, tszTemp, -1, NULL, NULL, NULL, NULL);

        szStr = new char[nSize];

        memset(szStr, 0x00, nSize);

        WideCharToMultiByte(CP_ACP, 0, tszTemp, -1, szStr, nSize, NULL, NULL);

        if(tszTemp)

        {

               delete [] tszTemp;

               tszTemp = NULL;

        }

#else

        int nLen = str.GetLength() + 1;

        szStr = new char[nLen];

        memset(szStr, 0x00, nLen);

        strcpy(szStr, str);

#endif

        return szStr;

}

 

// CString TCHAR

TCHAR* StringToTCHAR(CString str)

{

        TCHAR *tszStr = NULL;

        int nLen = str.GetLength() + 1;

        tszStr = new TCHAR[nLen];

        memset(tszStr, 0x00, nLen*sizeof(TCHAR));

        _tcscpy(tszStr, str);

 

        return tszStr;

}

 

// Char CString

CString CharToString(char *str)

{

        CString cStr;

#if defined(UNICODE) || defined(_UNICODE)

        int nLen = strlen(str) + 1;

        TCHAR *tszTemp = NULL;

        tszTemp = new TCHAR[nLen];

        memset(tszTemp, 0x00, nLen*sizeof(TCHAR));

        MultiByteToWideChar(CP_ACP, 0, str, -1, tszTemp, nLen*sizeof(TCHAR));

        cStr.Format(_T("%s"), tszTemp);

        if(tszTemp)

        {

               delete [] tszTemp;

               tszTemp = NULL;

        }

#else

        cStr.Format("%s", str);

#endif

        return cStr;

}

 

// Char TCHAR

TCHAR* CharToTCHAR(char *str)

{

        TCHAR *tszStr = NULL;

#if defined(UNICODE) || defined(_UNICODE)

        int nLen = strlen(str) + 1;

        tszStr = new TCHAR[nLen];

        memset(tszStr, 0x00, nLen*sizeof(TCHAR));

        MultiByteToWideChar(CP_ACP, 0, str, -1, tszStr, nLen*sizeof(TCHAR));

#else

        int nLen = strlen(str) + 1;

        tszStr = new TCHAR[nLen];

        memset(tszStr, 0x00, nLen*sizeof(TCHAR));

        _tcscpy(tszStr, str);

#endif

        return tszStr;

}

 

// TCHAR CString

CString TCHARToString(TCHAR *str)

{

        CString cStr;

        cStr.Format(_T("%s"), str);

        return cStr;

}

 

// TCHAR Char

char* TCHARToChar(TCHAR *str)

{

        char *szStr = NULL;

#if defined(UNICODE) || defined(_UNICODE)

        int nSize = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, NULL, NULL, NULL);

        szStr = new char[nSize];

        memset(szStr, 0x00, nSize);

        WideCharToMultiByte(CP_ACP, 0, str, -1, szStr, nSize, NULL, NULL);

#else

        int nLen = strlen(str) + 1;

        szStr = new char[nLen];

        memset(szStr, 0x00, nLen);

        strcpy(szStr, str);

#endif

        return szStr;

}


<출처> http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8562&page=1

반응형