Unicode编码的项目中CString、char* 、wstring、string的相互转换
2016-03-12 20:27
344 查看
在多字节字符集项目下面CString转char*不是什么问题,但现在都流行使用unicode字符集,而且也是微软推荐的。那么由于字符集的问题CString转char*就会出现一定的问题,必须要有特殊的方法才行,以下是结合网上的一些资料和自己实践出来的两个方法:
1、CString转char* 可以使用以下函数:
2、CString转string和char*
3、wstring转string
4、string转wstring
1、CString转char* 可以使用以下函数:
static char* StringToChar(CString str){ //获取字符串大小 int len = WideCharToMultiByte(CP_ACP, 0, str, str.GetLength(), NULL, 0, NULL, NULL); //为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小 char* p = new char[len + 1]; //以字节为单位 //宽字节编码转换成多字节编码 WideCharToMultiByte(CP_ACP, 0, str, str.GetLength()+1, p, len+1, NULL, NULL); p[len + 1] = '/0'; //多字节字符以'/0'结束 return p; } 这个函数有可能会造成内存溢出的错误
2、CString转string和char*
CString str=_T("测试"); CStringA strA= str.GetBuffer(0); string stdStr = strA.GetBuffer(); char* p=stdStr.c_str();
3、wstring转string
//将wstring转换成string static string ws2s(wstring wstr) { if (wstr.empty())return ""; 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'; //删除缓冲区并返回值 result.append(buffer); delete[] buffer; return result; }
4、string转wstring
//将string转wstring static wstring s2ws(const string& s){ if (s.empty())return L""; size_t convertedChars = 0; string curLocale = setlocale(LC_ALL, NULL); //curLocale="C" setlocale(LC_ALL, "chs"); const char* source = s.c_str(); size_t charNum = sizeof(char)*s.size() + 1; wchar_t* dest = new wchar_t[charNum]; mbstowcs_s(&convertedChars, dest, charNum, source, _TRUNCATE); wstring result = dest; delete[] dest; setlocale(LC_ALL, curLocale.c_str()); return result; }
相关文章推荐
- Linux 与 Windows 对UNICODE 的处理方式
- Unicode详细分析解释
- vbs中将GB2312转Unicode的代码
- 程序员趣味读物 谈谈Unicode编码
- 常用字符集编码详解(ASCII GB2312 GBK GB18030 unicode UTF-8)
- C#实现Json转Unicode的方法
- UTF-8、Unicode 标准化表单、BOM
- 浅谈Unicode与JavaScript的发展史
- JavaScript中字符串与Unicode编码互相转换的实现方法
- php utf-8转unicode的函数第1/2页
- php UTF-8、Unicode和BOM问题
- Unicode 编码转换器
- javascript下汉字和Unicode编码互转代码
- string,CString,char*之间的转化
- PHP如何实现Unicode和Utf-8编码相互转换
- PHP解码unicode编码的中文字符代码分享
- 浅析c++ 宏 #val 在unicode下的使用
- 简单谈谈php中的unicode和utf8编码
- 趣谈Unicode、Ascii、utf-8、GB2312、GBK等编码知识
- vbs实现unicode和ascii编码转换