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

简介: //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;
    }
目录
相关文章
|
6月前
|
JavaScript
JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
|
8月前
两个方法实现 任意两个进制间相互转换
两个方法实现 任意两个进制间相互转换
36 0
两个方法实现 任意两个进制间相互转换
进制之间的转换
说明:进制之间的转换有多种,我只列出自己常使用的方法。 十进制:十进制是以 0-9 这九个数字组成的,也是我们日常生活中最常见的数字 二进制:二进制是 0 和 1 这两个数字组成的,一般常用于计算机中表示 八进制:八进制是 0-7 这八个数字组成的,为了区分,一般开头以 0 开头 十六进制:十六进制由 0-9 和A-F 组成,从 A-F 为 10-15,为了区别,开头以 0x 开头
【C++之标准类型数据的格式输出2】显示字母B组成的三角形
【C++之标准类型数据的格式输出2】显示字母B组成的三角形
C#中字符串是否可以转换为数值
C#中字符串是否可以转换为数值
|
开发框架 .NET Java
C#基础——字符串、数字之间的转换
C#基础——字符串、数字之间的转换
461 0
C#基础——字符串、数字之间的转换