一、VC中字符串类型的互相转换
      总是觉得VC中的类型纷繁复杂,扑朔迷离。因为有了Unicode,因为C、C++类型相互转化如此不同。保存char的不止char一种,还可以用short,unsigned short,int 等来保存。单单就字符串就有N多种类型,其它类型也不止一个。再加上C++中本来就没有正式的string类型,所以,平常就会碰到很多种相同意思,但不同类型,或相同类型,不同写法的Type.

如何在他们之间相互转化,也是在学习VC中避免不了的一个问题。

二、首先看一下几种类型的定义:

      

[cpp] view plaincopy
  1. typedef char CHAR
  2. typedef wchar_t WCHAR
  3. #ifdef UNICODE
  4. typedef WCHAR TCHAR
  5. #else
  6. typedef char TCHAR
  7. #endif
  8. typedef unsigned char BYTE;
  9. typedef _nullterminated CONST CHAR* LPCSTR;
  10. typedef CHAR *LPSTR;
  11. #ifdef UNICODE
  12. typedef LPWSTR LPTSTR
  13. #else
  14. typedef LPSTR LPTSTR
  15. #endif
  16. #ifdef UNICODE
  17. typedef LPCWSTR LPCTSTR
  18. #else
  19. typedef LPCSTR LPCTSTR
  20. #endif

P->point C->const T->W,TEXT,_T(即在UNICODE下)

三、各种类型间的转换

这里,把Cstring看作一个转换的中间值,任何类型都是相它看齐。

1. LPCSTR ←→Cstring 
      有两种方法,一是强制转换,like below:

[cpp] view plaincopy
  1. Cstring strHello;
  2. strHello="Hello world";
  3. LPCSTR lpStr=(LPCSTR)strHello;
  4. Cstring str2;
  5. str2=(CString)lpStr;

使用Format,

str2.Format("%s",lpStr);

2. LPCTSTR←→Cstring
       LPCTSTR和LPCSTR转换方式是一样的,平常,我们一般可以用LPCTSTR来代替LPCSTR。

3. TCHAR*(char*)←→Cstring
       TCHAR在VC中表示的是unsigned short,可以支持Unicode字符集。两类型之间的转换可以像以下这样:

[cpp] view plaincopy
  1. TCHAR* myChars = strHello.GetBuffer(strHello.GetLength());
  2. str2=(CString)myChars; //或者str2.Format("%s",myChars);

注意:Cstring转TCHAR*不能用以下代码转换:

[cpp] view plaincopy
  1. myChars = (LPCTSTR)strHello; //Error,Can not Convert from 'const char*'  to 'char*'

也不能这样转化:

[cpp] view plaincopy
  1. myChars=(LPTSTR)strHello; //Cstring不能转化为char*

但是可以这样:

[cpp] view plaincopy
  1. myChars=(LPTSTR)(LPCTSTR)strHello; //先把strHello转化为const char*,再转化为char*

4. LPBYTE←→Cstring
       LPBYTE是unsigned char*类型,它们之间的转换如下:

[cpp] view plaincopy
  1. LPBYTE lpByte = (LPBYTE)strHello.GetBuffer(strHello.GetLength()); //GetBuffer返回LPTSTR类型

5. TCHAR[]←→Cstring
     它们之间的转换又不一样,因为涉及到数组。所以用strcpy函数来进行,strCpy的函数原型如下:
      LPTSTR StrCpy(LPTSTR psz1,LPCTSTR )
     它们之间的转换如下:

[cpp] view plaincopy
  1. CHAR strChar[200]
  2. StrCpy(strChar,(LPCTSTR)strHello);
  3. Cstring str2 = (CString)strChar; //或者用Format函数

由此可见,Cstring转换到别的类型,都要转成LPCSTR或者LPCTSTR类型这一关(LPCSTR,LPCTSTR代表了const char* , const short*)。然后再通过LPCSTR或LPCTSTR转换成别的类型(包括unsigned char*,char*),所以,要把Cstring转换成其它类型,首先看这个类型是不是const char* 或者const short*,如果是,可以直接转,如果不是,首先转成LPCSTR或LPCTSTR,再把它们强制转换成相应的字符串类型.

而任何类型转换成Cstring,则需要在前面加上(CString)强制转换即可,或者用Cstring类的成员函数Format

二、VC中其它常用类型转换
      其中,很多函数都用到<stdlib.h>和<wchar.h>,如果用到,要把头文件包含进源文件.
      1.字符串转换成其它类型

Double atof(char* string);

Double wtof(const wchar_t* string);
      int atoi(const char* string);
      _int64 _atoi64(const char* string)

int wtoi(const wchar_t* string);
      int64 wtoi64(const wchar_t* string);
      long atol(const char* string);
      long wtol(const wchar_t* string);

举例:

[cpp] view plaincopy
  1. char* s="-2309.12E-15";
  2. double x=atof(s);   //out:-2309120E-012
  3. s="-9885 pigs";
  4. int I=atoi(s);              //out:-9885

2.其它类型转换成字符型:

char* itoa(int value,char* string,int radix);
      char* i64toa(int64 value,char* string,int radix);
      char* ui64toa(unsigned int64 value,char* string,int radix);
      wchar_t * itow(int value, wchar_t string, int radix);
      char* _ltoa(long value,char* string,int radix);

举例:

[cpp] view plaincopy
  1. int i=100;
  2. itoa(i,temp,10); //十进制
  3. itoa(i,temp,2); //二进制
  4. Cstring str;
  5. Str.Fomat("%d",i); //整型to Cstring
  6. Str.Format("%f",f); //Float to CString

VC中的一些字符类型及其转换相关推荐

  1. 统计字符串中每种字符类型的个数demo

    /** 统计字符串中每中字符类型的个数,思路:* 1.键盘录入一个字符串* 2.获取到每个字符,遍历字符串* for (int i = 0; i < s.length(); i++) {char ...

  2. java中字符类型的转换

    1.如何将字符串String转化为整数int int i = Integer.parseInt(str); int i = Integer.valueOf(my_str).intValue(); 注: ...

  3. Oracle迁移DM8后NCHAR字符类型的转换说明

    1.NCHAR与CHAR类型的区别: oracle中:NCHAR一个精度可以存放一个字母或者一个汉字:CHAR:一个精度存放一个字母,存放一个汉字需要两个精度. Oracle--eg: SQL> ...

  4. C++中数字和字符串类型的转换

    // 编译环境: VS2013,C++11#include "stdafx.h" #include <iostream> #include <string> ...

  5. java中StringBuffer和String类型的转换

    01 String转StringBuffer 第一种 StringBuffer()构造方法 第二种方法 通过append() 01 StringBuffer转String 第一种 String构造方法 ...

  6. Oracle中编码与字符转换

    一.ASCII码与字符相互转换  ASCII(x) gets the ASCII value of the character x,CHR() and ASCII() have the opposit ...

  7. 演练VC中的common一族

    1.表头控制 Header Control 2.图像列表控制 Image List 3.列表控制和视 List Control&List View 4.树控制和视 Tree Control&a ...

  8. python中list是什么类型_Python中的list数据类型

    创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...

  9. html如何设置字符类型,html 空格字符类型

    1,Html中空格 不断行的空白(1个字符宽度)     半个空白(1个字符宽度)     一个空白(2个字符宽度)     窄空白(小于1个字符宽度) 2,Css 的方式空格 CSS中当 white ...

最新文章

  1. 飞书与德勤管理咨询达成战略合作,赋能企业实现智慧运营与管理
  2. python socket 通信
  3. 算法--------翻转字符串里的单词(Java版本)
  4. Dubbo-go 源码笔记(二)客户端调用过程
  5. 节假日api_iOS能跳过节假日的晚安闹钟捷径
  6. mysql在mac上的坑
  7. webpack基础使用Loader(三)
  8. 两阶段3D目标检测网络 SIENet: Spatial Information Enhancement Network for 3D Object Detection from Point Cloud
  9. 论文 计算机动态网页的制作,毕业论文 动态网页制作学习网站的设计与实现
  10. phabricator mysql_Phabricator服务的搭建
  11. 华为P50 Pro最新渲染图曝光 预装鸿蒙HarmonyOS 2
  12. OpenCV学习笔记:视频处理
  13. mtk最新刷机平台SP_Flash_Tool_v6.2208_Win
  14. 如何使用易媒助手对文章进行原创检测
  15. 一个例子学会自相关互相关的计算
  16. 变色龙引导r2795
  17. Helix QAC/QAC++ — 软件静态测试工具
  18. mysql全量备份命令_linux下进行定时mysql数据库全量备份
  19. CS224d-Day 2:TensorFlow 入门
  20. 软考基础知识—操作系统

热门文章

  1. 药师帮完成1.33亿美元D轮融资,投资方为老虎环球基金、H Capital和DCM
  2. 在visualstudio中使用Qt
  3. 设计模式 -- 中介者设计模式 (Mediator Pattern)
  4. 2014年七月写过的代码,现在看来,还有待改进呀
  5. 【Android】Eclipse自动编译NDK/JNI的三种方法
  6. 杂谈:选择游戏还是应用?
  7. 企业架构(EA)美国之行
  8. linux下多进程编程简介
  9. React: 关于React通信方式
  10. JS类型判断、对象克隆、数组克隆