当前位置: 电脑软硬件应用网 > 设计学院 > 网络编程 > C语言 > 正文 |
|
|||
VC常用数据类型使用转换详解 | |||
2010-3-29 9:09:10 文/网络收集 出处:电脑软硬件应用网 | |||
例如: long l=222; ing i=100; _variant_t lVal(l); lVal = (long)i; COleVariant的使用与_variant_t的方法基本一样,请参考如下例子: COleVariant v3 = "字符串", v4 = (long)1999; CString str =(BSTR)v3.pbstrVal; long i = v4.lVal; 七、其它 对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如: LPARAM lParam; WORD loValue = LOWORD(lParam); //取低16位 WORD hiValue = HIWORD(lParam); //取高16位 对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如: WORD wValue; BYTE loValue = LOBYTE(wValue); //取低8位 BYTE hiValue = HIBYTE(wValue); //取高8位 如何将CString类型的变量赋给char*类型的变量 1、GetBuffer函数: 使用CString::GetBuffer函数。 char *p; CString str="hello"; p=str.GetBuffer(str.GetLength()); str.ReleaseBuffer(); 将CString转换成char * 时 CString str("aaaaaaa"); strcpy(str.GetBuffer(10),"aa"); str.ReleaseBuffer(); 当我们需要字符数组时调用GetBuffer(int n),其中n为我们需要的字符数组的长度.使用完成后一定要马上调用ReleaseBuffer(); 还有很重要的一点就是,在能使用const char *的地方,就不要使用char * 2、memcpy: CString mCS=_T("cxl"); char mch[20]; memcpy(mch,mCS,20); 3、用LPCTSTR强制转换: 尽量不使用 char *ch; CString str; ch=(LPSTR)(LPCTSTR)str; CString str = "good"; char *tmp; sprintf(tmp,"%s",(LPTSTR)(LPCTSTR)str); 4、 CString Msg; Msg=Msg+"abc"; LPTSTR lpsz; lpsz = new TCHAR[Msg.GetLength()+1]; _tcscpy(lpsz, Msg); char * psz; strcpy(psz,lpsz); CString类向const char *转换 char a[100]; CString str("aaaaaa"); strncpy(a,(LPCTSTR)str,sizeof(a)); 或者如下: strncpy(a,str,sizeof(a)); 以上两种用法都是正确地. 因为strncpy的第二个参数类型为const char *.所以编译器会自动将CString类转换成const char *. CString转LPCTSTR (const char *) CString cStr; const char *lpctStr=(LPCTSTR)cStr; LPCTSTR转CString LPCTSTR lpctStr; CString cStr=lpctStr; 将char*类型的变量赋给CString型的变量 可以直接赋值,如: CString myString = "This is a test"; 也可以利用构造函数,如: CString s1("Tom"); 1、sprintf()函数 CString str = "good"; char tmp[200] ; sprintf(tmp, "%s",(LPCSTR)str); (LPCSTR)str这种强制转换相当于(LPTSTR)(LPCTSTR)str CString类的变量需要转换为(char*)的时,使用(LPTSTR)(LPCTSTR)str 然而,LPCTSTR是const char *,也就是说,得到的字符串是不可写的!将其强制转换成LPTSTR去掉const,是极为危险的! 一不留神就会完蛋!要得到char *,应该用GetBuffer()或GetBufferSetLength(),用完后再调用ReleaseBuffer()。 2、strcpy()函数 CString str; char c[256]; strcpy(c, str); char mychar[1024]; CString source="Hello"; strcpy((char*)&mychar,(LPCTSTR)source); 关于CString的使用 1、指定 CString 形参 对于大多数需要字符串参数的函数,最好将函数原型中的形参指定为一个指向字符 (LPCTSTR) 而非 CString 的 const 指针。 当将形参指定为指向字符的 const 指针时,可将指针传递到 TCHAR 数组(如字符串 ["hi there"])或传递到 CString 对象。 CString 对象将自动转换成 LPCTSTR。任何能够使用 LPCTSTR 的地方也能够使用 CString 对象。 2、如果某个形参将不会被修改,则也将该参数指定为常数字符串引用(即 const CString&)。如果函数要修改该字符串, 则删除 const 修饰符。如果需要默认为空值,则将其初始化为空字符串 [""],如下所示: void AddCustomer( const CString& name, const CString& address, const CString& comment = "" ); 3、对于大多数函数结果,按值返回 CString 对象即可。 串的基本运算 对于串的基本运算,很多高级语言均提供了相应的运算符或标准的库函数来实现。 为叙述方便,先定义几个相关的变量: char s1[20]="dir/bin/appl",s2[20]="file.asm",s3[30],*p; int result; 下面以C语言中串运算介绍串的基本运算 1、求串长 int strlen(char *s); //求串s的长度 【例】printf("%d",strlen(s1)); //输出s1的串长12 2、串复制 char *strcpy(char *to,*from);//将from串复制到to串中,并返回to开始处指针 【例】strcpy(s3,s1); //s3="dir/bin/appl",s1串不变 3、联接 char *strcat(char *to,char *from);//将from串复制到to串的末尾, //并返回to串开始处的指针 【例】strcat(s3,"/"); //s3="dir/bin/appl/" strcat(s3,s2); //s3="dir/bin/appl/file.asm" 4、串比较 int strcmp(char *s1,char *s2);//比较s1和s2的大小, //当s1<s2、s1>s2和s1=s2时,分别返回小于0、大于0和等于0的值 【例】result=strcmp("baker","Baker"); //result>0 result=strcmp("12","12"); //result=0 result=strcmp("Joe","joseph") //result<0 5、字符定位 char *strchr(char *s,char c);//找c在字符串s中第一次出现的位置, //若找到,则返回该位置,否则返回NULL 【例】p=strchr(s2,'.'); //p指向"file"之后的位置 if(p) strcpy(p,".cpp"); //s2="file.cpp" 注意: ①上述操作是最基本的,其中后 4个操作还有变种形式:strncpy,strncath和strnchr。 ②其它的串操作见C的<string.h>。在不同的高级语言中,对串运算的种类及符号都不尽相同 ③其余的串操作一般可由这些基本操作组合而成 【例】求子串的操作可如下实现: void substr(char *sub,char *s,int pos,int len){ //s和sub是字符数组,用sub返回串s的第pos个字符起长度为len的子串 //其中0<=pos<=strlen(s)-1,且数组sub至少可容纳len+1个字符。 if (pos<0||pos>strlen(s)-1||len<0) Error("parameter error!"); strncpy(sub,&s[pos],len); //从s[pos]起复制至多len个字符到sub |
|||
最新热点 | 最新推荐 | 相关文章 | ||
用C语言实现的闹钟程序 C#实现Windows关机的代码 用动态规划法求组和数的算法 循环结构程序具有哪3个组成部分? const成员函数有什么特点? c语言求平均分程序 一道关于指针的C语言题 C语言求3个整数的最大公约数 BM模式匹配算法C语言实现 从键盘输入任意5个4位整数存入数组a… |
关于45IT | About 45IT | 联系方式 | 版权声明 | 网站导航 | |
Copyright © 2003-2011 45IT. All Rights Reserved 浙ICP备09049068号 |