|
在vc中字符串分为两种,一种是宽字符,一种是窄字符。编码分别对应unicode和ansi。所以在开发当中要注意这两种字符的相互转换。下面是vc中常用的字符串指针。
LPCWSTR 对应 const wchar_t*
LPCSTR 对应 const char*
LPWSTR 对应 wchar_t*
LPSTR 对应 char*
mfc自带CString类,一般可以实现字符串指针想字符串中进行转换。但是转换后会自动变成unicode格式。具体转换为
CString str=(CString)各种字符串指针;
由于CString字符串是宽字符的所以我们算字符长度的时候分为两种,一种是按照宽字符算,一种是按照窄字符算。
宽字符: str.GetLength();
窄字符: (str.GetLength()+1)*sizeof(wchar_t);
下面是声明一个动态数组
int wlen=GetLength();
wchar_t* bff=new wchar_t[wlen];
char* abff=new char[len];
下面是将CString的字符串转换成指针
宽字符 wcscpy(bff,arg.GetBuffer());
窄字符 char *buf;
CString str= L"test ";
buf = (LPSTR)(LPCTSTR)str;
指针转换成数组
char str[256];
strcpy(str, lpstr);
delete[] lpstr;//用完要释放空间
还可以这样表示
char* str="sample";
int len = strlen(str)+1;
char copystr[256];
memcpy(copystr,str,len);
宽窄字符的相互转换就需要用到两个函数,一个是MultiByteToWideChar(窄转宽),一个是WideCharToMultiByte (宽转窄)下面是简单的实例
窄转宽:
DWORD dwMinSize;
dwMinSize=::MultiByteToWideChar(CP_ACP,0,lpstr,-1,NULL,0); //获取转换后字符的长度。
LPWSTR lpwStr=new WCHAR[dwMinSize];//声明动态数组
::MultiByteToWideChar(CP_ACP,0,lpstr,-1,lpwStr,dwMinSize);//转换
宽转窄:(同理)
DWORD dwNum;
dwNum= WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
LPSTR psText = new char[dwNum];
WideCharToMultiByte (CP_OEMCP,NULL,lpcwszStr,-1,psText,dwNum,NULL,FALSE);
CString 字符串操作。
拼接 CString str=str1+str2;
转换指针 CString str("graycat");
LPCTSTR p = s;
字符串比较 if(s1.Compare( s2 ) == -1){}
字符串查找 if(s.Find( "de" ) == 3){}
判断字符串是否为空 if(S.IsEmpty())
字符串替换 str.replace(newstr,oldstr);
str.replace(newlpcstr,oldlpcstr); |
|