Unicode格式字符串之间转换

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yhc166188/article/details/53894714


char*转CString

CString CharToUnicode(const char* str)

{
     DWORD dwUnicodeLen;       //转换后Unicode的长度
     TCHAR *pwText;            //保存Unicode的指针
     CString strUnicode;       //返回值
     //获得转换后的长度,并分配内存
     dwUnicodeLen = MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);
     pwText = new TCHAR[dwUnicodeLen+1];
     if (!pwText)
     {
         return strUnicode;
     }
     //转为Unicode
     MultiByteToWideChar(CP_ACP,0,str,-1,pwText,dwUnicodeLen);
     pwText[dwUnicodeLen]='\0';
     strUnicode.Append(pwText);


delete [] pwText;
pwText = NULL;


     return strUnicode;
}

char*转CString
char* UnicodeToChar(CString& str)
{
    int len = WideCharToMultiByte(CP_ACP,0,str,-1,NULL,0,NULL,NULL);
    char *pstr = new char[len +1];
    if( NULL == pstr )
        return NULL;
    WideCharToMultiByte(CP_ACP,0,str,-1,pstr,len,NULL,NULL );
    
    return pstr;

}

避免内存泄漏返回的字符串使用完之后记得要delete掉,如delete[]  pstr;pstr=NULL;


//将wstring转换成string  
std::string wstring2string(std::wstring wstr,char* chDevId)  
{  
std::string result; 
//获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的  
int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);  
char* buffer = new char[len + 1];  
//宽字节编码转换成多字节编码  
WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);  
buffer[len] = '\0'; 
strcpy_s(chDevId,255,buffer);
//删除缓冲区并返回值  
result.append(buffer);  
delete[] buffer;  
return result;  



展开阅读全文

没有更多推荐了,返回首页