电脑软硬件应用网
当前位置: 电脑软硬件应用网 > 设计学院 > 网络编程 > C语言 > 正文
VC常用数据类型使用转换详解
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");
  将CString类型的变量赋给char []类型(字符串)的变量

  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

上一页  [1] [2] 

  • 上一篇文章:

  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    用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号