VC MFC字符格式轉換

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類型的具體介紹參考轉載博客

 http://blog.csdn.net/daofengdeba/article/details/15026855


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章