wchar -> char -> String


  • wchar -> char로 문자열을 변환 하려고 하는데,
    인터넷에서 찾은 함수는 메모리 할당하고 해제 해주지 않고 
    그 메모리를 포인터로 넘겨줘서 메모리 사용에 좋지 못할 것 같아서 수정하였다.

  • 함수 WCharToChar,  ToUTF8Str 두개 사용 

  • 메모리를 할당 받아서 WCharToChar 함수로 포인터 넘겨줌 



  // wchar -> char

void WCharToChar(const wchar_t* pwstrSrc, char * pstr)

{

setlocale(LC_ALL, "korean"); 

assert(pwstrSrc);


#if !defined _DEBUG

int len = 0;

len = (wcslen(pwstrSrc) + 1)*2;

char* pstr      = (char*) malloc ( sizeof( char) * len);


WideCharToMultiByte( 949, 0, pwstrSrc, -1, pstr, len, NULL, NULL);

#else

int nLen = wcslen(pwstrSrc);

int count = 0;


count = wcstombs(pstr, pwstrSrc, nLen+1); // 여기서 와이드에서 멀티 바이트로 변환

#endif

}



  std::string ToUTF8Str(const WCHAR *S, const int NumChars)

{

std::string Result = "";

int BufferLen = NumChars + 1;


char* pstr      = (char*) malloc ( sizeof( char) * BufferLen + 1);


WCharToChar(S, pstr); // 여기서 호출 해서 


Result.assign(pstr); // String 으로 변환 해준 후 

free(pstr);            // 메모리 해제 


return Result;

}



만약 wcstombs() 사용하는데 뒤에 부분이 잘린다면 

pstr의 크기를 2배로 늘려주면 됨 

버퍼 크기 문제였음ㅜㅜ


문자열 짜잉나 !!