现在的位置: 首页 > 综合 > 正文

windows_string_wstring

2018年09月17日 ⁄ 综合 ⁄ 共 1211字 ⁄ 字号 评论关闭

//实在是想不起原文出自何处了,希望作者体谅。3Q。

 

class Cstring2wstring
{
public:
    Cstring2wstring(){}

    //string wstring 转化法则
    std::string WChar2Ansi(LPCWSTR pwszSrc)
    {
        int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
        if (nLen<= 0) return std::string("");
        char* pszDst = new char[nLen];
        if (NULL == pszDst) return std::string("");
        WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
        pszDst[nLen -1] = 0;
        std::string strTemp(pszDst);
        delete [] pszDst;
        return strTemp;
    }
    string ws2s(wstring& inputws){ return WChar2Ansi(inputws.c_str()); }
    //Converting a Ansi string to WChar string
    std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen)
    {
        int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);
        if(nSize <= 0) return NULL;
        WCHAR *pwszDst = new WCHAR[nSize+1];
        if( NULL == pwszDst) return NULL;
        MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);
        pwszDst[nSize] = 0;
        if( pwszDst[0] == 0xFEFF) // skip Oxfeff
            for(int i = 0; i < nSize; i ++)
                pwszDst[i] = pwszDst[i+1];
        wstring wcharString(pwszDst);
        delete[] pwszDst;
        return wcharString;
    }
    std::wstring s2ws(const string& s){ return Ansi2WChar(s.c_str(),s.size());}

};

 

【上篇】
【下篇】

抱歉!评论已关闭.