VC中的一些字符类型及其转换
一、VC中字符串类型的互相转换
总是觉得VC中的类型纷繁复杂,扑朔迷离。因为有了Unicode,因为C、C++类型相互转化如此不同。保存char的不止char一种,还可以用short,unsigned short,int 等来保存。单单就字符串就有N多种类型,其它类型也不止一个。再加上C++中本来就没有正式的string类型,所以,平常就会碰到很多种相同意思,但不同类型,或相同类型,不同写法的Type.
如何在他们之间相互转化,也是在学习VC中避免不了的一个问题。
二、首先看一下几种类型的定义:
- typedef char CHAR
- typedef wchar_t WCHAR
- #ifdef UNICODE
- typedef WCHAR TCHAR
- #else
- typedef char TCHAR
- #endif
- typedef unsigned char BYTE;
- typedef _nullterminated CONST CHAR* LPCSTR;
- typedef CHAR *LPSTR;
- #ifdef UNICODE
- typedef LPWSTR LPTSTR
- #else
- typedef LPSTR LPTSTR
- #endif
- #ifdef UNICODE
- typedef LPCWSTR LPCTSTR
- #else
- typedef LPCSTR LPCTSTR
- #endif
P->point C->const T->W,TEXT,_T(即在UNICODE下)
三、各种类型间的转换
这里,把Cstring看作一个转换的中间值,任何类型都是相它看齐。
1. LPCSTR ←→Cstring
有两种方法,一是强制转换,like below:
- Cstring strHello;
- strHello="Hello world";
- LPCSTR lpStr=(LPCSTR)strHello;
- Cstring str2;
- str2=(CString)lpStr;
使用Format,
str2.Format("%s",lpStr);
2. LPCTSTR←→Cstring
LPCTSTR和LPCSTR转换方式是一样的,平常,我们一般可以用LPCTSTR来代替LPCSTR。
3. TCHAR*(char*)←→Cstring
TCHAR在VC中表示的是unsigned short,可以支持Unicode字符集。两类型之间的转换可以像以下这样:
- TCHAR* myChars = strHello.GetBuffer(strHello.GetLength());
- str2=(CString)myChars; //或者str2.Format("%s",myChars);
注意:Cstring转TCHAR*不能用以下代码转换:
- myChars = (LPCTSTR)strHello; //Error,Can not Convert from 'const char*' to 'char*'
也不能这样转化:
- myChars=(LPTSTR)strHello; //Cstring不能转化为char*
但是可以这样:
- myChars=(LPTSTR)(LPCTSTR)strHello; //先把strHello转化为const char*,再转化为char*
4. LPBYTE←→Cstring
LPBYTE是unsigned char*类型,它们之间的转换如下:
- LPBYTE lpByte = (LPBYTE)strHello.GetBuffer(strHello.GetLength()); //GetBuffer返回LPTSTR类型
5. TCHAR[]←→Cstring
它们之间的转换又不一样,因为涉及到数组。所以用strcpy函数来进行,strCpy的函数原型如下:
LPTSTR StrCpy(LPTSTR psz1,LPCTSTR )
它们之间的转换如下:
- CHAR strChar[200]
- StrCpy(strChar,(LPCTSTR)strHello);
- 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);
举例:
- char* s="-2309.12E-15";
- double x=atof(s); //out:-2309120E-012
- s="-9885 pigs";
- 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);
举例:
- int i=100;
- itoa(i,temp,10); //十进制
- itoa(i,temp,2); //二进制
- Cstring str;
- Str.Fomat("%d",i); //整型to Cstring
- Str.Format("%f",f); //Float to CString
VC中的一些字符类型及其转换相关推荐
- 统计字符串中每种字符类型的个数demo
/** 统计字符串中每中字符类型的个数,思路:* 1.键盘录入一个字符串* 2.获取到每个字符,遍历字符串* for (int i = 0; i < s.length(); i++) {char ...
- java中字符类型的转换
1.如何将字符串String转化为整数int int i = Integer.parseInt(str); int i = Integer.valueOf(my_str).intValue(); 注: ...
- Oracle迁移DM8后NCHAR字符类型的转换说明
1.NCHAR与CHAR类型的区别: oracle中:NCHAR一个精度可以存放一个字母或者一个汉字:CHAR:一个精度存放一个字母,存放一个汉字需要两个精度. Oracle--eg: SQL> ...
- C++中数字和字符串类型的转换
// 编译环境: VS2013,C++11#include "stdafx.h" #include <iostream> #include <string> ...
- java中StringBuffer和String类型的转换
01 String转StringBuffer 第一种 StringBuffer()构造方法 第二种方法 通过append() 01 StringBuffer转String 第一种 String构造方法 ...
- Oracle中编码与字符转换
一.ASCII码与字符相互转换 ASCII(x) gets the ASCII value of the character x,CHR() and ASCII() have the opposit ...
- 演练VC中的common一族
1.表头控制 Header Control 2.图像列表控制 Image List 3.列表控制和视 List Control&List View 4.树控制和视 Tree Control&a ...
- python中list是什么类型_Python中的list数据类型
创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...
- html如何设置字符类型,html 空格字符类型
1,Html中空格 不断行的空白(1个字符宽度) 半个空白(1个字符宽度) 一个空白(2个字符宽度) 窄空白(小于1个字符宽度) 2,Css 的方式空格 CSS中当 white ...
最新文章
- 飞书与德勤管理咨询达成战略合作,赋能企业实现智慧运营与管理
- python socket 通信
- 算法--------翻转字符串里的单词(Java版本)
- Dubbo-go 源码笔记(二)客户端调用过程
- 节假日api_iOS能跳过节假日的晚安闹钟捷径
- mysql在mac上的坑
- webpack基础使用Loader(三)
- 两阶段3D目标检测网络 SIENet: Spatial Information Enhancement Network for 3D Object Detection from Point Cloud
- 论文 计算机动态网页的制作,毕业论文 动态网页制作学习网站的设计与实现
- phabricator mysql_Phabricator服务的搭建
- 华为P50 Pro最新渲染图曝光 预装鸿蒙HarmonyOS 2
- OpenCV学习笔记:视频处理
- mtk最新刷机平台SP_Flash_Tool_v6.2208_Win
- 如何使用易媒助手对文章进行原创检测
- 一个例子学会自相关互相关的计算
- 变色龙引导r2795
- Helix QAC/QAC++ — 软件静态测试工具
- mysql全量备份命令_linux下进行定时mysql数据库全量备份
- CS224d-Day 2:TensorFlow 入门
- 软考基础知识—操作系统