VS2008을 사용하게되면서 UNICODE와 ANCI간의 스트링 상호변환 함수를 정리한 것입니다.
프로젝트 문자집합 속성(유니코드, 멀티바이트)에 상관없이 변환 가능합니다.
// // 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; }
'개발이야기 > MFC' 카테고리의 다른 글
일정 날짜 기준 로그파일 제거 (1) | 2012.05.17 |
---|---|
로컬 IP주소 얻기 (0) | 2012.05.17 |
폴더선택 다이얼로그와 초기폴더경로 설정 (0) | 2012.05.15 |
MFC Control 오픈소스 모음 (0) | 2012.05.13 |
3D 다이아몬드 (0) | 2012.05.13 |