宽字符串和标准字符串的转换

简介: //1string WstringToString(wstring str){    const wchar_t *pwc=str.
//1
string WstringToString(wstring str)
{
    const wchar_t *pwc=str.c_str();
    int nLen=WideCharToMultiByte(CP_ACP,0,(LPCWSTR)pwc,-1,NULL,0,NULL,NULL);
    if(nLen<=0) return string("");
    char *presult=new char[nLen];
    if (NULL==presult) return string("");
    WideCharToMultiByte(CP_ACP,0,(LPCWSTR)pwc,-1,presult,nLen,NULL,NULL);
    presult[nLen-1]=0;
    string result(presult);
    delete[] presult;
    return result;
}
wstring StringToWstring(string str)
{
    const char *pstr=str.c_str();
    int nLen=str.size();
    int nSize=MultiByteToWideChar(CP_ACP,0,(LPCSTR)pstr,nLen,0,0);
    if (nSize<=0) return NULL;
    WCHAR *pDst=new WCHAR[nSize+1];
    if (pDst==NULL)return NULL;
    MultiByteToWideChar(CP_ACP,0,(LPCSTR)pstr,nLen,pDst,nSize);
    pDst[nSize]=0;
    if (pDst[0]==0xFEFF)
    {
        for (int i=0;i<nSize;i++)
        {
            pDst=pDst[i+1];
        }
    }
    wstring wcstr(pDst);
    delete []pDst;
    return wcstr;
}




//2
class auto_setlocate
{
   public:
       auto_setlocate()
       {
           setlocale(LC_ALL, "");
       }
};


std::string wstring2string(const wchar_t* wsz)
    {
        static auto_setlocate as;
        std::string ret(wcslen(wsz)*2, '/0');
        std::wcstombs(const_cast<char*>(ret.c_str()), wsz, ret.length());
        return ret;
    }


    std::string wstring2string(const std::wstring& wstr)
    {
        static auto_setlocate as;
        std::string ret(wstr.length()*2, '/0');
        std::wcstombs(const_cast<char*>(ret.c_str()), wstr.c_str(), wstr.length());
        return ret;
    }


    std::wstring string2wstring(const char* sz)
    {
        static auto_setlocate as;
        std::wstring ret(strlen(sz), '/0');
        std::mbstowcs(const_cast<wchar_t*>(ret.c_str()), sz, ret.length());
        return ret;
    }


    std::wstring string2wstring(const std::string& str)
    {    
        static auto_setlocate as;
        std::wstring ret(str.length(), '/0');
        std::mbstowcs(const_cast<wchar_t*>(ret.c_str()), str.c_str(), str.length());
        return ret;
    }
目录
相关文章
|
4月前
字符串的表示形式
字符串的表示形式。
37 6
|
9月前
|
移动开发 Unix Linux
多行文本转成一行的实现方法
多行文本转成一行的实现方法
|
12月前
|
C++
【C++之标准类型数据的格式输出2】显示字母B组成的三角形
【C++之标准类型数据的格式输出2】显示字母B组成的三角形
C#中字符串是否可以转换为数值
C#中字符串是否可以转换为数值
如何将Excel中以文本形式存储的数字批量快速地转换为数值类型
如何将Excel中以文本形式存储的数字批量快速地转换为数值类型
如何将Excel中以文本形式存储的数字批量快速地转换为数值类型
c++数字和字符串的转换
c++数字和字符串的转换
198 0
|
开发框架 .NET Java
C#基础——字符串、数字之间的转换
C#基础——字符串、数字之间的转换
421 0
C#基础——字符串、数字之间的转换