天天看点

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