1. 程式人生 > >VC++中經常用到的型別轉換(總結)

VC++中經常用到的型別轉換(總結)

1、VARIANT轉COleSafeArray、  COleSafeArray轉BYTE型陣列

在串列埠通訊的OnCommMscomm()事件中會涉及到這兩種型別轉換,比如:

VARIANT variant_inp;

COleSafeArray safearray_inp;

LONG len;

BYTE rxdata[2048];

if(m_cmsSerial.get_CommEvent()==2)  //事件值為表示串列埠接受緩衝區內有字元

{

        variant_inp=m_cmsSerial.get_Input();   //讀緩衝區

          safearray_inp=variant_inp;       //VARIANT型變數轉換成

//COleSafeArray型變數

        len=safearray_inp.GerOneDimSize();  //得到有效資料長度

        for(k=0;k<len;k++)

               safearray_inp.GetElement(&k,rxdata+x);   // safearray_inp轉換成

//BYTE型陣列

     …………..

        ……………

}

關於VARIANT、ColeSafeArray型別的具體介紹參考轉載部落格

2、陣列轉容器、容器轉陣列

1>以整形為例:

陣列轉容器:

vector<int>recvBuf;

int buf[255];

for(int i=0;i<254;++i)

{

        recvBuf.push_back(buf[i]);

}

2>容器轉陣列:

vector<int>recBuf;

int buf[255];

for(vector<int>::size_type ix=0; ix!=recBuf.size(); ++ix)

{

        buf[ix]=recBuf[ix];

}

3、多種型別轉換成CString型別、CString轉其他型別

1>轉換成CString型:

function Format(const Format: string; const Args: array of const): string; overload;

Format函式的第一個引數是格式化字串,用%d表示int%s表示char*%u表示unsigned int%hd表示short%hu表示unsigned short%hhd表示char%hhu表示unsigned char%f表示float,後面的引數就是與格式化字串中每個欄位對應的型別變數。

intCString  CString.Format(“%d”, int);

StringCString CString.Format(“%s”,string.c_str());

char*CStringCString.Format(“%s”, char*);

LPCSTRCStringLPCSTR lpStr=”test”;  CString str(lpStr);

2>CString轉換成其他型別:

CStringint

CString ss="1212.12";

int temp=atoi(ss); //atoi _atoi64atol  

將字元轉換為整數,可以使用atoi_atoi64atol

int int_chage = atoi((lpcstr)ss)或:

CString str = "23"; 

UINT uint; 

sscanf(str, "%d", uint);

CString型轉成LPCSTR(C語言裡相當於char*)

CString str=”test”;

LPCSTR lpStr=(LPCSTR)str;

CString  string 

string s(CString.GetBuffer()); 

GetBuffer()後一定要ReleaseBuffer(),否則就沒有釋放緩衝區所佔的空間.

CString  char * 

CString strtest="wwwwttttttt"; 

char point=strtest.GetBuffer(strtest.GetLength()); 

CString轉換 char[100] char a[100]; 

CString str("aaaaaa"); 

strncpy(a,(LPCTSTR)str,sizeof(a));

 CString str="aaa"; 

char* ch; 

ch=(char*)(LPCTSTR)str; 

4Stringintchar*int int型轉Stringchar*stringintchar*

1>string  int 

char*  int 

#include <stdlib.h>  

int atoi(const char *nptr); 

long atol(const char *nptr); //把字串轉換成長整型數

long long atoll(const char *nptr); //把字串轉換成長長整型數(64位)

2>int  string 

char buffer[1024];

itoa(GoodNum,buffer,10);   //intchar*    stdlib.h

string strGoodNum(buffer);//char*string

char*  string

string s(char *); 

你的只能初始化,在不是初始化的地方最好還是用assign(). 

3> intchar*

stdlib.h中有個函式itoa() itoa的用法: itoa(i,num,10); 

需要轉換成字元的數字 num 轉換後儲存字元的變數

10 轉換數字的基數(進位制)10就是說按照10進位制轉換數字。還可以是2816等等你喜歡的進位制型別

原形:char *itoa(int value, char* string, int radix); 例項:

#include "stdlib.h"

 #include "stdio.h" 

main() { 

int i=1234; 

char s[5]; 

itoa(i,s,10);

 printf("%s",s); getchar();

 }

標準C裡沒有string,

char *==char []==string 

 cannot convert from 'const char *' to 'char *' const char *c=aa.c_str(); 

string.c_str()只能轉換成const char 

5stringconst char* const char*string

1> stringconst char*

string s = "abc";

const char* c_s = s.c_str();

2> const char*string

直接賦值即可

const char* c_s = "abc";

string s(c_s);

6stringchar*char*string

1>stringchar*

string s = "abc";

char* c;

const int len = s.length();

c = new char[len+1];

strcpy(c,s.c_str());

2> char*string

char* c = "abc";

string s(c);

7const char*char*char*const char*

1>const char*char*

const char* cpc = "abc";

char* pc = new char[100];//足夠長

strcpy(pc,cpc);

2> char*const char*

直接賦值即可

char* pc = "abc";

const char* cpc = pc;

 8doublestring

先通過sprintf函式轉換成char*,再轉換成string

double GoodHPrice=234.45;

char buffer[1024];

sprintf(buffer,"%.2lf\0",GoodHPrice);

string strGoodHPrice(buffer);//doublestring