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

VC++中经常用到的类型转换(总结)相关推荐

  1. VC中的一些字符类型及其转换

    一.VC中字符串类型的互相转换       总是觉得VC中的类型纷繁复杂,扑朔迷离.因为有了Unicode,因为C.C++类型相互转化如此不同.保存char的不止char一种,还可以用short,un ...

  2. VC中ADO连接SQLSERVER的几种标准方式?

    VC用ADO访问数据库全攻略,介绍了VC用ADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看. 正文 一.ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE D ...

  3. 在VC中使用ADO开发数据库应用程序

    在VC中使用ADO开发数据库应用程序 一.ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口.ADO 使您能够编写应用程序以通过 ...

  4. vc中 volatile 的作用

    vc中 volatile 的作用 volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如 操作系统.硬件或者其它线程等.遇到这个关键字声明的变量,编译器对访 ...

  5. VC中debug和release版本的区别

    vc中debug和release的不同 收藏  在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...

  6. VC中基于 Windows 的精确定时

    方式一:VC中的WM_TIMER消息映射能进行简单的时间控制.首先调用函数SetTimer()设置定时 间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔.然后在应用程序中增 ...

  7. vc中常用文件操作(二) Ini文件操作

    在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下: 一.将信息写入.INI文件中. 1.所用的WINA ...

  8. VC++中GlobalAlloc()、malloc()和new()函数之间区别

    VC++中GlobalAlloc().malloc()和new()函数都可以用来实现内存的动态分配,那么它们之间有什么区别呢? 三者的区别主要有以下几点: 1.GlobalAlloc()函数在程序的堆 ...

  9. c 语言 多进程,VC++中进程与多进程管理的方法详解

    本文实例讲述了VC++中进程与多进程管理的方法,分享给大家供大家参考.具体方法分析如下: 摘要: 本文主要介绍了多任务管理中的多进程管理技术,对进程的互斥运行.子进程的创建与结束等作了较详细的阐述. ...

最新文章

  1. GitHub告急!黑客威胁程序员不交钱就删库
  2. JSP第二次作业_2小题
  3. 动态规划立体匹配代码_411,动态规划和递归求不同路径 II
  4. MySql DATE_FORMAT函数用法
  5. mysql卸载时弹框,win10卸载mysql5安装mysql8
  6. java对象不会被改变_Java 并发编程(二)对象的不变性和安全的公布对象
  7. 程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)
  8. mysql配置性能_MySQL配置性能优化
  9. ftp网页版服务器地址,免费ftp服务器地址汇总
  10. 师范生计算机硬件技能怎么填,浅析对师范生教育技术能力培养与发展问题的思考的论文...
  11. 量化策略回测TRIXKDJ
  12. android获取mp3时间长,android 获取音频时长
  13. 摄动法在计算机中的应用,渐近分析与摄动方法的计算机辅助求解.pdf
  14. How to write an exploratory essay
  15. 刷手机二维码轻松登机(仅限移动用户)
  16. 向日葵iOS主控端7.2发布:iPhone远程桌面 鼠标指针、触控任性操作
  17. 赴美生子的一些调研——诚信是拒签之本,中国的月子中心在美是非法的,医疗和教育费用高...
  18. 十分钟接入iOS 12新特性——Siri Shortcuts
  19. Maya 2018 Qt Designer无法运行解决方案
  20. 精挑细选!2021年最优秀的一份阿里面经就在这里了,希望对大家有帮助!

热门文章

  1. IP地址最简单的解释
  2. 校验、AJAX与过滤器
  3. 瓜环葫芦脲-葫芦[6]脲、葫芦[7]脲、葫芦[5]脲、葫芦[8]脲的应用研究
  4. document.getElementById的理解
  5. 国庆第一天上班,长夜漫漫,无心睡眠,一大波靓照奉上!
  6. H265关于RTP封包
  7. C-企业员工管理系统
  8. Kotlin实现一个简单的安卓app答题系统(含web服务端)
  9. python培训机构调研最多的股票_使用python爬取东方财富网机构调研数据
  10. Windows7 XP兼容模式(XP Mode)安装必要步骤精解