본문 바로가기

진리는어디에

[C++] WideCharToMultiByte()

요즘 비주얼스튜디오 2008에서 코딩하고 있는데 이녀석은 디폴트 인코드 값이 UNICODE인지라 1바이트 짜리 char 데이터가 필요 하면 wide charactor에서 multibyte로 변경해주어야만 한다. 매번 쓸때마다 함수들의 파라메터를 찾기 위해 msdn을 찾아 보게 만드는 귀찮은 함수다. 그래서 나름 간단하게 만든다고 만들어 보았다(요걸 라이브러리로 만들면 안되냐고 따지지 마세요..안하는게 아니라 못할만한 이유가 있어서 못하는 것이니..ㅠㅠ)

#include <string>

std::string wstringTostring(const std::wstring& strSrc)
{
    char* szRet = NULL;
    int len = ::WideCharToMultiByte(CP_ACP, 0, strSrc.c_str(), -1, szRet, 0, NULL, NULL);
    if(0 < len)
    {
        szRet = new char[len];
        ::ZeroMemory(szRet, len);
        ::WideCharToMultiByte(CP_ACP, 0, strSrc.c_str(), -1, szRet, len, NULL, NULL);
        std::string strRet(szRet);
        delete [] szRet;
        return strRet;
    }
    return std::string(""); 
}

참고적으로 mutibyte 의 길이 값으로 0을 주면 필요한 만큼의 길이가 계산되어 리턴된다.

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!