1.区别wchar_t,char,WCHAR
ANSI:即 char (8bit),可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数。
UNICODE:即 wchar_t(16bit),可用字符串处理函数:wcscat(),wcscpy(),wcslen()等以wcs打头的函数。
wchar_t 实际定义在里:
typedef unsigned short wchar_t;
另外,在头文件中有这样的定义:typedef wchar_t WCHAR; 所以WCHAR实际就是wchar_t
wchar_t 为了让编译器识别Unicode字符串,必须以在前面加一个“L”,例如: wchar_t *szTest=L"This is a Unicode string.";
2.TCHAR
在C语言里面提供了 _UNICODE宏(有下划线),在Windows里面提供了UNICODE宏(无下划线),只要定了_UNICODE宏和UNICODE宏,系统就会自 动切换到UNICODE版本,否则,系统按照ANSI的方式进行编译和运行。只定义了宏并不能实现自动的转换,他还需要一系列的字符定义支持。
1. TCHAR
如果定义了UNICODE宏则TCHAR被定义为wchar_t。
typedef wchar_t TCHAR;
否则TCHAR被定义为char
typedef char TCHAR;
2. LPTSTR
如果定义了UNICODE宏则LPTSTR被定义为LPWSTR。
typedef LPTSTR LPWSTR;
否则TCHAR被定义为char
typedef LPTSTR LPSTR;
说明:在使用字符串常量的时候需要使用_TEXT(“MyStr”)或者_T("")来支持系统的自动转换。
3.BSTR
BSTR是一个带长度前缀的字符串,主要由操作系统来管理的,所以要用api.主要用来和VB打交道的(VB里的string就是指它)要操作它的API函数有很多.比如SysAllocString,SysFreeString等等.
vc里封装它的类如_bstr_t,及ATL中的CComBSTR等.
一个 BSTR 由头部和字符串组成,头部包含了字符串的长度信息,字符串中可以包含嵌入的 null 值。
BSTR 是以指针的形式进行传递的。(指针是一个变量,包含另外一个变量的内存地址,而不是数据。) BSTR 是 Unicode 的,即每个字符需要两个字节。 BSTR 通常以两字节的 null 字符结束。 wstr是宽字符,以双字节表示一个字符 bstr是为了与原先的basic字符兼容,它的最前面的4个字节为其长度,以/0结束.
4.更进一步的字符串以及其指针的类型定义
由于Win32 API文档的函数列表使用函数的常用名字(例如, "SetWindowText"),所有的字符串都是用TCHAR来定义的。(除了XP中引入的只适用于Unicode的API)。下面列出一些常用的typedefs,你可以在msdn中看到他们。
type Meaning in MBCS builds Meaning in Unicode builds
WCHAR wchar_t wchar_t
LPSTR char* char*
LPCSTR const char* const char*
LPWSTR wchar_t* wchar_t*
LPCWSTR wchar_t* wchar_t*
TCHAR TCHAR char wchar_t
LPTSTR TCHAR* TCHAR*
LPCTSTR const TCHAR* const TCHAR*
------------------------------------------------------------------------------
CString ,BSTR ,LPCTSTR之间关系和区别
CString是一个动态TCHAR数组
BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵)
LPCTSTR只是一个常量的TCHAR指针
CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。
typedef OLECHAR FAR* BSTR;
typedef const char * LPCTSTR;
------------------------------------------------------------------------------
vc++中各种字符串的表示法
首先char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。
LP的含义是长指针(long pointer)。LPSTR是一个指向以‘/0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。
而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。
1.LP表示长指针,在win16下有长指针(LP)和短指针(P)的区别,而在win32下是没有区别的,都是32位.所以这里的LP和P是等价的.
2.C表示const
3.T是什么东西呢,我们知道TCHAR在采用Unicode方式编译时是wchar_t,在普通时编译成char.
为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。
LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。
然后为了实现两种编码的通用,提出了TCHAR的定义:
如果定义_UNICODE,声明如下:
typedef wchar_t TCHAR;
如果没有定义_UNICODE,则声明如下:
typedef char TCHAR;
LPTSTR和LPCTSTR中的含义就是每个字符是这样的TCHAR。
CString类中的字符就是被声明为TCHAR类型的,它提供了一个封装好的类供用户方便地使用。
LPCTSTR:
#ifdef _UNICODE
typedef const wchar_t * LPCTSTR;
#else
typedef const char * LPCTSTR;
#endif
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Jack__h/archive/2009/12/13/4953068.aspx
分享到:
相关推荐
详细介绍了CString,BSTR,LPCTSTR之间关系和区别
CString、LPCTSTR、LPTSTR、TCHAR、WCHAR、string、wchar_t、char解析 CString、LPCTSTR、LPTSTR、TCHAR、WCHAR、string、wchar_t、char解析 CString、LPCTSTR、LPTSTR、TCHAR、WCHAR、string、wchar_t、char解析
C++字符串类代码,让你学习“类”时,不在迷茫!
各种 C++ 字符串类型转换(char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string 和 System.String) 本主题演示如何将各种 C++ 字符串类型转换为其他字符串。可以转换的字符串类型包括 char *、wchar_t*、_...
BSTR 、Char 、CString 之间的类型转换。
常用字符串之间的转换,BSTR和CString和char的转换,涵盖齐全
string_CString判断是否含有某些字符
字符串CString 操作用法详解,很详细的运用实例讲解CString字符串的各个操作用法。
CString与各种类型字符之间转换和方法使用,例如char型,指针等
一个把字符串转换成日期的函数,在网上找了好久没有找到类似的,后来问了一同学,搞定了。现传上来,以供新手借鉴。
VC中BSTR、Char和CString类型的转换
在VC++编程中,我们有时会遇到关于截取字符串的问题,对于CString类型字符串的截取VC中有现成的函数可供使用,主要是:CString Mid (int nFirst, int nCount);和BOOL AfxExtractSubString (CString& rString, ...
该源码功能:使用C++来实现字符串的封装,风格规范,功能齐全,是C++初学者的好资料,对体会C++的本质很有帮助。
关于QT和MFC类型转换 qstring cstring bstr qdatetime 转换
...CString ,,我乐意把每一个知识,当做是每一个技术分子..高超技术,从刻苦开始,只有不停的思考,不停的锻炼,不停的探索,才能不停的进步,,,
CString 型和 char* 类型的相互转化;char* 转化成 CString;CString 转化成 char* 之一:使用LPCTSTR强制转化;CString 转化成 char* 之二:使用String对象的GetBuffer方法;CString 转化成 char*之三;和控件的...
字符串操作类,与VC CString类接口差不多,线程安全,跨平台,已经在windows 下VC和linux下g++编译通过
C++之char*,char[],string,CString,数字等互相转化,便于c字符与c++字符之间的转换。
Cstring 与BYTE类型之间转换,实现字节与字符串的转换,将字符串转化为字节类型。0进制与16进制间转换
c++课件 cstring类c++课件 cstring类c++课件 cstring类c++课件 cstring类