您的位置:首页 > 其它

Unicode格式字符串之间转换

2016-12-27 13:22 351 查看
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;  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: