Unicode与Ansi互转
1 BOOL CTool::AnsiToUnicode(const char *pSrc, CString &strResult) 2 { 3 #ifndef _UNICODE 4 return FALSE; 5 #endif 6 int nLen=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,pSrc,-1,NULL,0); 7 strResult.Empty(); 8 if(nLen==0) 9 return FALSE; 10 wchar_t* pResult=new wchar_t[nLen]; 11 MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,pSrc,-1,pResult,nLen); 12 strResult.Format(_T("%s"),pResult); 13 delete[] pResult; 14 pResult=NULL; 15 return TRUE; 16 } 17 18 wchar_t* CTool::AnsiToUnicode(const char *szStr) 19 { 20 int nLen=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,szStr,-1,NULL,0); 21 if(nLen==0) 22 return NULL; 23 wchar_t* pResult=new wchar_t[nLen]; 24 MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,szStr,-1,pResult,nLen); 25 return pResult; 26 } 27 28 char* CTool::UnicodeToAnsi(const wchar_t *szStr) 29 { 30 int nLen=WideCharToMultiByte(CP_ACP,0,szStr,-1,NULL,0,NULL,NULL); 31 if(nLen==0) 32 return NULL; 33 char* pResult=new char[nLen]; 34 WideCharToMultiByte(CP_ACP,0,szStr,-1,pResult,nLen,NULL,NULL); 35 return pResult; 36 }
后面两个函数返回一个new的指针,接收用完后需要自己手动释放
char* 到string :直接初始化或者赋值
string到char*: const char *str = s.c_str();
之后s改变,str将随之改变,所以最好将s重新拷贝一份
不允许vector初始化数组,但是可以用数组初始化vector
int int_arr[] = { 1,2,3,4,5 };
vector<int> ivec(begin(int_arr), end(int_arr));
数组的begin和end在iterator头文件中
尽量使用标准库类型,而非数组
尽量使用vector和迭代器,避免使用内置数组和指针
尽量使用string,避免使用C风格的基于数组的字符串