使用完需release

如下

wchar_t *wchar;
char *ch = SSHUtil::ConvertWcsToMbs(wchar);

delete [] ch;

 

char *ConvertWcsToMbs(wchar_t *src)
{
    int nLength;
    char *pConverted = NULL;
    size_t nNumberOfCharConverted = 0;

    if ( src == NULL )
        return NULL;

    nLength = static_cast<int>(wcslen(src));

    int num = WideCharToMultiByte(CP_ACP, 0, src, static_cast<int>(wcslen(src)+1), NULL, 0, NULL, NULL);
    if ( num <= 0 )
        return NULL;

    pConverted = new char[num+1];
    num = WideCharToMultiByte(CP_ACP, 0, src, static_cast<int>(wcslen(src)+1), pConverted, num, NULL, NULL);

    return pConverted;
}

wchar_t *ConvertMbsToWcs(char *src)
{
    int nLength;
    wchar_t *pConverted = NULL;
    size_t nNumberOfCharConverted = 0;

    if ( src == NULL )
        return NULL;

    nLength = static_cast<int>(strlen(src));

    int num = MultiByteToWideChar(CP_ACP, 0, src, nLength+1, NULL, 0);
    if ( num <= 0 )
        return NULL;

    pConverted = new wchar_t[num+1];
    num = MultiByteToWideChar(CP_ACP, 0, src, nLength+1, pConverted, num);

    return pConverted;
}

char *ConvertWcsToUTF8(wchar_t *src)
{
    int nLength;
    char *pConverted = NULL;
    size_t nNumberOfCharConverted = 0;

    if ( src == NULL )
        return NULL;

    nLength = static_cast<int>(wcslen(src));

    int num = WideCharToMultiByte(CP_UTF8, 0, src, nLength+1, NULL, 0, NULL, NULL);
    if ( num <= 0 )
        return NULL;

    pConverted = new char[num+1];
    num = WideCharToMultiByte(CP_UTF8, 0, src, nLength+1, pConverted, num, NULL, NULL);

    return pConverted;
}

wchar_t *ConvertUTF8ToWcs(char *src)
{
    int nLength;
    wchar_t *pConverted = NULL;
    size_t nNumberOfCharConverted = 0;

    if ( src == NULL )
        return NULL;

    nLength = static_cast<int>(strlen(src));

    int num = MultiByteToWideChar(CP_UTF8, 0, src, nLength+1, NULL, 0);
    if ( num <= 0 )
        return NULL;

    pConverted = new wchar_t[num+1];
    num = MultiByteToWideChar(CP_UTF8, 0, src, nLength+1, pConverted, num);

    return pConverted;
}

char *ConvertMbsToUTF8(char *src)
{
    wchar_t    *pUnicode = NULL;
    char    *pUTF8 = NULL;

    pUnicode = ConvertMbsToWcs(src);
    pUTF8 = ConvertWcsToUTF8(pUnicode); 
    
    SAFE_RELEASE(pUnicode);

    return pUTF8;
}

char *ConvertUTF8ToMbs(char *src)
{
    wchar_t    *pUnicode = NULL;
    char    *pMbs = NULL;

    pUnicode = ConvertUTF8ToWcs(src);
    pMbs = ConvertWcsToMbs(pUnicode);

    SAFE_RELEASE(pUnicode);
    
    return pMbs;
}

arrow
arrow

    跪著讀 發表在 痞客邦 留言(0) 人氣()