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,後面的引數就是與格式化字串中每個欄位對應的型別變數。
int轉CString :CString.Format(“%d”, int);
String轉CString :CString.Format(“%s”,string.c_str());
char*轉CString:CString.Format(“%s”, char*);
LPCSTR轉CString:LPCSTR lpStr=”test”; CString str(lpStr);
2>CString轉換成其他型別:
CString轉int型:
CString ss="1212.12";
int temp=atoi(ss); //atoi _atoi64或atol
將字元轉換為整數,可以使用atoi、_atoi64或atol。
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;
4、String轉int、char*轉int 、int型轉String、char*轉string、int轉char*
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); //int轉char* stdlib.h
string strGoodNum(buffer);//char*轉string
char* 轉 string
string s(char *);
你的只能初始化,在不是初始化的地方最好還是用assign().
3> int轉char*
在stdlib.h中有個函式itoa() itoa的用法: itoa(i,num,10);
i 需要轉換成字元的數字 num 轉換後儲存字元的變數
10 轉換數字的基數(進位制)10就是說按照10進位制轉換數字。還可以是2,8,16等等你喜歡的進位制型別
原形: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
5、string轉const char* 、const char*轉string
1> string轉const char*
string s = "abc";
const char* c_s = s.c_str();
2> const char*轉string
直接賦值即可
const char* c_s = "abc";
string s(c_s);
6、string轉char*、char*轉string
1>string轉char*
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);
7、const 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;
8、double轉string
先通過sprintf函式轉換成char*,再轉換成string
double GoodHPrice=234.45;
char buffer[1024];
sprintf(buffer,"%.2lf\0",GoodHPrice);
string strGoodHPrice(buffer);//double轉string