2012년 3월 15일 목요일

[MFC] Unicode환경에서 CString to char* 변환

Unicode 개발 환경에서, CString과 char* 간의 형변환은 지극히 귀찮은 일이다.

특히 console이 아닌 윈도우 UI기반으로 프로그램을 작성할 때, CFileDialog를
통해 파일이름 및 경로를 획득하고, 이를 이용하여 fopen (사실 다른 입출력
함수 (e.g., CreateFile을 쓰면 해결됨)) 등의 ANSI-C기반의 파일 입출력 함수에
활용하는 경우 위와 같은 형변환이 요구된다. 

Google등으로 검색해보면 많은 방법들이 제시되는데, 그중에서 실제로 
정확하게 동작한 것을 남겨둔다. 나중을 위해...

Unicode 환경에서 CString --> char* 형변환은 두 단계로 이루어 진다.
1. CString to wchar_t* 간의 형변환
2. wchar_t* to char* 간의 형변환


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, -1, NULL, 0, NULL, NULL);
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);  

//Done.

댓글 1개:

  1. 정보 감사합니다. unicode환경에서는 한 단계 더 거쳐야하는 것을 몰라 한참 헤매다가 작성자님 덕분에 해결하였습니다^^

    답글삭제