在MFC中字符串常用的是CString,当然在实际操作中,标准的是使用char*类型,所以我们免不了字符串之间的转换。下面就介绍常用的字符串的转换。
1)(Unicode编码下的转换)
CString转整型
UINT data=0;
_stscanf_s((LPCTSTR)value,_T("%d"),&data);
CString----->>string:
CString cs("test");
string s;
s = cs.GetBuffer(0);
string --------->> CString:
string s = "test";
CString cs;
cs = s.c_str();
char*与CString是用的比较多的,我把它封装成了下面两个函数,应该可以看懂什么意思把~
CString pcharToCString(char * pChar) { int charLen = strlen(pChar); //计算pChar所指向的字符串大小,以字节为单位,一个汉字占两个字节 int len = MultiByteToWideChar(CP_ACP, 0, pChar, charLen, NULL, 0); //计算多字节字符的大小,按字符计算 wchar_t *pWChar = new wchar_t[len + 1]; //为宽字节字符数申请空间, MultiByteToWideChar(CP_ACP, 0, pChar, charLen, pWChar, len); //多字节编码转换成宽字节编码 pWChar[len] = '\0'; //将wchar_t数组转换为CString CString str; str.Append(pWChar); return str; } char * CStringTopchar(CString str) { int n = str.GetLength(); int len = WideCharToMultiByte(CP_ACP, 0, str, str.GetLength(), NULL, 0, NULL, NULL); //为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小 char * buf = new char[len + 1]; //以字节为单//宽字节编码转换成多字节编码 WideCharToMultiByte(CP_ACP, 0, str, str.GetLength(), buf, len, NULL, NULL); buf[len] = '\0'; //多字节字符以'\0'结束 return buf; }
多字节编码下:char *转CString可以直接用Format,
如:char *s="han" ;
CString str=_T("han");
str.Format(_T("%s"), s);
2)CString常用的成员函数:
诸如:GetLength,Find,Left,Right,Mid,FindOneOf,Insert,Delete,MakeUpper,MakeLower之类的,CString功能非常强大,只要是关于字符串的操作,CString基本都可以很轻松的完成,具体使用参见
另附,一些前辈写过的一些函数,用于不同编码格式的转换,至于编码ANSI,UNICODE,GB2312,GBK,UTF
-8等等,百度区别~:
wstring ANSIToUnicode( const string &str ) { int unicodeLen = MultiByteToWideChar( CP_ACP,0,str.c_str(),-1,NULL,0 ); wchar_t * pUnicode; pUnicode = new wchar_t[unicodeLen]; wmemset(pUnicode,0,unicodeLen); MultiByteToWideChar( CP_ACP,0,str.c_str(),-1,pUnicode,unicodeLen ); wstring rt; rt = wstring(pUnicode); delete pUnicode; return rt; } string UnicodeToANSI( const wstring &str ) { char* pElementText; int iTextLen; iTextLen = WideCharToMultiByte( CP_ACP,0,str.c_str(),-1,NULL,0,NULL,NULL ); pElementText = new char[iTextLen]; memset(pElementText, 0, iTextLen ); WideCharToMultiByte( CP_ACP,0,str.c_str(),-1,pElementText,iTextLen,NULL,NULL ); string strText(pElementText); delete[] pElementText; return strText; } std::string UnicodeToUtf8(const std::wstring& widestring) { int utf8size = WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL); char *buf = new char[utf8size]; memset(buf,0,utf8size); WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, buf, utf8size, NULL, NULL); string str(buf); delete buf; return str; } std::wstring Utf8ToUnicode( const string & Utf8string ) { int unicodeSize = MultiByteToWideChar(CP_UTF8,0,Utf8string.c_str(),-1,NULL,0); wchar_t *buf = new wchar_t[unicodeSize]; wmemset(buf,0,unicodeSize); MultiByteToWideChar(CP_UTF8,0,Utf8string.c_str(),-1,buf,unicodeSize); wstring wstr(buf); delete buf; return wstr; } std::string AnsiToUtf8(std::string AnsiString) { //首先Ansi转为Unicode std::wstring Unicodestring = ANSIToUnicode(AnsiString); //然后Unicode转UTF8 std::string Utf8String = UnicodeToUtf8(Unicodestring); return Utf8String; } std::string Utf8ToAnsi(std::string Utf8String) { std::wstring UnicodeString = Utf8ToUnicode(Utf8String); std::string AnsiString = UnicodeToANSI(UnicodeString); return AnsiString; }