« | July 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | |
| 公告 |
☆★☆★☆★☆★☆★☆ 生活的点点记录,以及一些体会...........
喜欢是淡淡的爱,爱是深深的喜欢.
时间会见证一切.......................
欢迎大家指出错误,共同进步..........
期待中..............................
☆★☆★☆★☆★☆★☆ |
Blog信息 |
blog名称: 日志总数:162 评论数量:312 留言数量:0 访问次数:939706 建立时间:2005年5月17日 |

| |
[wince study]VC中字符串类型的互相转换 文章收藏
oceanblue 发表于 2008/5/8 11:03:50 |
一,VC中字符串类型的互相转换
总是觉得VC中的类型纷繁复杂,扑朔迷离。因为有了Unicode,因为C、C++类型相互转化如此不同。保存char的不止char一种,还可以用short,unsigned short,int 等来保存。单单就字符串就有N多种类型,其它类型也不止一个。再加上C++中本来就没有正式的string类型,所以,平常就会碰到很多种相同意思,但不同类型,或相同类型,不同写法的Type.
如何在他们之间相互转化,也是在学习VC中避免不了的一个问题。
现来看平时常用的保存字符串的类型有那些?
Cstring、TCHAR*、 TCHAR[]、 char*、 LPCSTR、 LPCTSTR、 LPBYTE
以上都是在VC中用的比较多得。他们之间如何转化:
这里,把Cstring看作一个转换的中间值,任何类型都是相它看齐。
1. LPCSTR ßàCstringLPCSTR在VC中代表的是char*」但并不能用char*的方式去转换它。它与Cstring可以直接互换,就像以下代码这样:
500)this.width=500'>Cstring strHello;500)this.width=500'>strHello=”Hello world”;500)this.width=500'>LPCSTR lpStr=(LPCSTR)strHello;500)this.width=500'>Cstring str2;500)this.width=500'>str2=(CString)lpStr;500)this.width=500'>
另外,Cstring类有一成员函数Format,可以用来把类型转换成Cstring类型,以上lpStr转换成Cstring可以这样表示:
500)this.width=500'>str2.Format(“%s”,lpStr);
2. LPCTSTRßàCstringLPCTSTR和LPCSTR转换方式是一样的,所不同的是两个类型本身不一样。LPCTSTR表示的是unsigned short*,这样,它可以支持Unicode字符类型,而LPCSTR只支持ANSI字符类型。平常,我们一般可以用LPCTSTR来代替LPCSTR。
3. TCHAR*(char*)ßàCstringTCHAR在VC中表示的是unsigned short,可以支持Unicode字符集。两类型之间的转换可以像以下这样
500)this.width=500'>TCHAR* myChars = strHello.GetBuffer(strHello.GetLength());500)this.width=500'>str2=(CString)myChars; //或者str2.Format(“%s”,myChars);500)this.width=500'>
注意:Cstring转TCHAR*不能用以下代码转换:
500)this.width=500'>myChars = (LPCTSTR)strHello; //Error,Can not Convert from ‘const char*’ to ‘char*’500)this.width=500'>
也不能这样转化:
500)this.width=500'>myChars=(LPTSTR)strHello; //Cstring不能转化为char*
但是可以这样:
500)this.width=500'>myChars=(LPTSTR)(LPCTSTR)strHello; //先把strHello转化为const char*,再转化为char*500)this.width=500'>
4. LPBYTEßàCstringLPBYTE是unsigned char*类型,它们之间的转换如下:
500)this.width=500'>LPBYTE lpByte = (LPBYTE)strHello.GetBuffer(strHello.GetLength());
//GetBuffer返回的是LPTSTR类型//也可以这样转换:
5. TCHAR[]ßàCstring它们之间的转换又不一样,因为涉及到数组。所以用strcpy函数来进行,strCpy的函数原型如下:LPTSTR StrCpy(LPTSTR psz1,LPCTSTR )它们之间的转换如下:
500)this.width=500'>CHAR strChar[200]500)this.width=500'>StrCpy(strChar,(LPCTSTR)strHello);500)this.width=500'>Cstring str2 = (CString)strChar; //或者用Format函数500)this.width=500'>
由此可见,Cstring转换到别的类型,都要转成LPCSTR或者LPCTSTR类型这一关(LPCSTR,LPCTSTR代表了const char* , const short*)。然后再通过LPCSTR或LPCTSTR转换成别的类型(包括unsigned char*,char*),所以,要把Cstring转换成其它类型,首先看这个类型是不是const char* 或者const short*,如果是,可以直接转,如果不是,首先转成LPCSTR或LPCTSTR,再把它们强制转换成相应的字符串类型.
而任何类型转换成Cstring,则需要在前面加上(CString)强制转换即可,或者用Cstring类的成员函数Format
二.VC中其它常用类型转换
其中,很多函数都用到<stdlib.h>和<wchar.h>,如果用到,要把头文件包含进源文件. 1.字符串转换成其它类型
500)this.width=500'> Double atof(char* string);500)this.width=500'>500)this.width=500'> Double wtof(const wchar_t* string);500)this.width=500'> int atoi(const char* string);500)this.width=500'> _int64 _atoi64(const char* string)500)this.width=500'>500)this.width=500'> int wtoi(const wchar_t* string);500)this.width=500'> int64 wtoi64(const wchar_t* string);500)this.width=500'> long atol(const char* string);500)this.width=500'> long wtol(const wchar_t* string);500)this.width=500'>500)this.width=500'>
举例:
500)this.width=500'> char* s=”-2309.12E-15”;500)this.width=500'> double x=atof(s); //out:-2309120E-012500)this.width=500'> s=”-9885 pigs”;500)this.width=500'> int I=atoi(s); //out:-9885
& |
|
回复:VC中字符串类型的互相转换 文章收藏
小杰(游客)发表评论于2008/12/29 16:25:53 |
|
回复:VC中字符串类型的互相转换 文章收藏
ruby(游客)发表评论于2008/12/24 13:30:07 |
|
回复:VC中字符串类型的互相转换 文章收藏
荷兰咯(游客)发表评论于2008/6/7 10:08:45 |
|
» 1 »
|