Programming - cpueblo.com

Unicode To Ansi


Unicode 를 Ansi 로 변경하는 함수 입니다. WideCharToMultiByte 를 이용

글쓴이 : 유광희 날짜 : 2007-07-25 (수) 14:02 조회 : 16232
Unicode 를 Ansi 로 변경하는 함수 입니다. WideCharToMultiByte 를 이용

int UnicodeToAnsi2(LPCWSTR srcString, LPSTR dstString, int dstStringLen)
{
    ZeroMemory(dstString, dstStringLen);
    int cw = lstrlenW(srcString);

    // 변경될 문자열의 길이를 얻음
    int cc = WideCharToMultiByte(CP_ACP, 0, srcString, cw, NULL, 0, NULL, NULL);
    if (cc == 0)
        return 0;

    if (cc > dstStringLen)
        return -1;

    cc = WideCharToMultiByte(CP_ACP, 0, srcString, cw, dstString, cc, NULL, NULL);
    if (cc == 0)
        return -1;

    return cc;
}

/*
예

CString Str = "하하하하"; // 유니코드 컴파일로 WCHAR 로 설정된 상황
char Buffer[2048];
int ConvertedLength = UnicodeToAnsi2(Str, Buffer, sizeof(Buffer));
*/




LPSTR UnicodeToAnsi(LPCWSTR srcString)
{
    if (srcString == NULL)
        return NULL;

    int cw = lstrlenW(srcString);

    // Unicode 의 내용이 없을 때
    if (cw == 0)
    {
        CHAR *psz = new CHAR[1];
        *psz='\\\\0';
        return psz;
    }

    // 변경될 문자열의 길이를 얻음
    int cc = WideCharToMultiByte(CP_ACP, 0, srcString, cw, NULL, 0, NULL, NULL);
    if (cc == 0)
        return NULL;

    // 할당 및 변환된 문자열을 리턴
    CHAR *psz = new CHAR[cc+1];
    cc = WideCharToMultiByte(CP_ACP, 0, srcString, cw, psz, cc, NULL, NULL);
    if (cc == 0)
    {
        delete[] psz;
        return NULL;
    }

    psz[cc]='\\\\0';
    return psz;
}

/*
예

CString Str = "하하하하"; // 유니코드 컴파일로 WCHAR 로 설정된 상황
char *pNewBuffer;
pNewBuffer = UnicodeToAnsi(Str);
*/