zoukankan      html  css  js  c++  java
  • VS2015 下 unicode 字符转换类

    #include "cutil.h"
    #include <Windows.h>
    wstring CUtil::UTF8ToUnicode(const string& str)
    {
        int  len = 0;
        len = str.length();
        int  unicodeLen = ::MultiByteToWideChar(CP_UTF8,
            0,
            str.c_str(),
            -1,
            NULL,
            0);
        wchar_t *  pUnicode;
        pUnicode = new  wchar_t[unicodeLen + 1];
        memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));
        ::MultiByteToWideChar(CP_UTF8,
            0,
            str.c_str(),
            -1,
            (LPWSTR)pUnicode,
            unicodeLen);
        wstring  rt;
        rt = (wchar_t*)pUnicode;
        delete  pUnicode;
    
        return  rt;
    }
    
    string CUtil::UnicodeToUTF8(const wstring& str)
    {
        char*     pElementText;
        int    iTextLen;
        // wide char to multi char
        iTextLen = WideCharToMultiByte(CP_UTF8,
            0,
            str.c_str(),
            -1,
            NULL,
            0,
            NULL,
            NULL);
        pElementText = new char[iTextLen + 1];
        memset((void*)pElementText, 0, sizeof(char) * (iTextLen + 1));
        ::WideCharToMultiByte(CP_UTF8,
            0,
            str.c_str(),
            -1,
            pElementText,
            iTextLen,
            NULL,
            NULL);
        string strText;
        strText = pElementText;
        delete[] pElementText;
        return strText;
    }
    
    wstring CUtil::ANSIToUnicode(const string& str)
    {
        int len = 0;
        len = str.length();
        int unicodeLen = ::MultiByteToWideChar(CP_ACP,
            0,
            str.c_str(),
            -1,
            NULL,
            0);
        wchar_t * pUnicode;
        pUnicode = new wchar_t[unicodeLen + 1];
        memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));
        ::MultiByteToWideChar(CP_ACP,
            0,
            str.c_str(),
            -1,
            (LPWSTR)pUnicode,
            unicodeLen);
        wstring rt;
        rt = (wchar_t*)pUnicode;
        delete pUnicode;
        return rt;
    }
    
    
    string CUtil::UnicodeToANSI(const wstring& str)
    {
        char*     pElementText;
        int    iTextLen;
        // wide char to multi char
        iTextLen = WideCharToMultiByte(CP_ACP,
            0,
            str.c_str(),
            -1,
            NULL,
            0,
            NULL,
            NULL);
        pElementText = new char[iTextLen + 1];
        memset((void*)pElementText, 0, sizeof(char) * (iTextLen + 1));
        ::WideCharToMultiByte(CP_ACP,
            0,
            str.c_str(),
            -1,
            pElementText,
            iTextLen,
            NULL,
            NULL);
        string strText;
        strText = pElementText;
        delete[] pElementText;
        return strText;
    }
  • 相关阅读:
    百度面试题
    京东2014年招聘会成都站笔试经历
    把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间
    POJ 2234 Matches Game
    POJ 3903 Stock Exchange
    POJ 2853 Sequence Sum Possibilities
    POJ 3519 Minimal Backgammon
    POJ 2096 Collecting Bugs
    POJ 3071 Football
    HDU 1175 连连看
  • 原文地址:https://www.cnblogs.com/lobsterIT/p/5654411.html
Copyright © 2011-2022 走看看