设为首页 加入收藏

TOP

VC++编程之字符串解惑(一)
2014-02-08 13:35:46 来源: 作者: 【 】 浏览:345
Tags:编程 字符串 解惑

  VC++中的字符串用起来着实让人难受,LPTSTR、LPCTSTR、LPCSTR、LPCWSTR、LPSTR、WCHAR、CString、_T()和L彼此之间的互相转换更是头痛。根据使用经验和MSDN Libary文档总结出如下:

  1.CString类型字符串

  CString位于头文件afx.h中,是MFC中的一种字符串类型的类。此处解释CString与LPSTR、LPCSTR相互转换问题。

  注:typedef char CHAR;  typedef CHAR* LPSTR;  typedef CONST CHAR * LPCSTR;

  1.1  LPSTR转换成CString

  LPSTR lpStr =  "TestString";

  CString str(lpStr);

  1.2  CString 转换成 LPSTR

  方法一:

  CString strName("TestString");

  LPSTR lpStr = strName.GetBuffer();

  strName.ReleaseBuffer();

  方法二:

  CString strName("TestString");

  LPSTR lpStr = (LPSTR)(LPCSTR) strName;

  2.  LPSTR、LPCSTR、LPWSTR、LPCWSTR、LPTSTR、LPCTSTR详解

  首先要补充两个宏的解释:UNICODE和MBCS

  MBCS宏对应的字符串指针是char *也就是LPSTR:typedef char * LPSTR

  UNICODE宏对应的指针是unsigned·short * 也就是LPWSTR: typedef unsigned·short* LPWSTR

  MBCS:

  它是多字节字符集,它是不定长表示世界文字的编码。MBCS表示英文字母时就和ASCII一样(这也是我们容易把MBCS和ASCII搞混的原因), 但表示其他文字时就需要用多字节。

  UNICODE:

  它是用两个字节表示一个字符的方法。比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节。UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义。

  WINDOWS下面的程序设计可以支持MBCS和UNICODE两种编码的字符串,具体用那种就看你定义了MBCS宏还是 UNICODE宏。LPTSTR、LPCSTR、LPCTSTR、LPSTR的意义:

  LPSTR:32bit指针 指向一个字符串,每个字符占1字节;

  LPCSTR:32-bit指针 指向一个常字符串,每个字符占1字节;

  LPCTSTR:32-bit指针 指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义;

  LPTSTR:32-bit指针 每字符可能占1字节或2字节,取决于Unicode是否定义。

  LPSTR

  一个指向以'\0'结尾的字符串指针,字符用8位Windows(ANSI)字符表示。更多信息参考"字体使用的字符集".这种类型在WinNT.h中声明如下:

  typedef  CHAR* LPSTR;

  LPCSTR  (WinNT.h)

  typedef _nullterminated CONST CHAR * LPCSTR;

  补充: wchar_t 是本机类型

  如果编译时指定编译参数 /Zc:wchar_t-,编译器就会要求定义wchar_t,或者要求包括定义它的众多头文件中的一个文件(如:wchar.h)。wchar_t 通常定义为typedef unsigned short  wchar_t;

  编译器通过使用 /Zc:wchar_t 将wchar_t识别为本机类型。有关wchar_t的更多信息,参看MSDN Libary 的Data type Ranges条目。

  WCHAR (Esent.h)

  The WCHAR data type contains a 16-bit Unicode character.

  #if !define(_NATIVE_WCHAR_T_DEFINE)

  typedef  unsigned short WCHAR;

  #else

  typedef wchar_t WCHAR;   //此处的wchar_t类型大小随机器不同(指机器字长)而不同

  #endif

  LPWSTR

  一个指向以'\0'结尾的字符串的指针,字符用16位Unicode字符集表示。更多信息参考"字体使用的字符集".这种类型在WinNT.h中声明如下:

  typedef  WCHAR * LPWSTR;

  LPCWSTR

  typedef CONST WCHAR * LPCWSTR;

  LPCTSTR   (WinNT.h)

  #ifdef  UNICODE

  typedef  LPCWSTR  LPCTSTR;

  #else

  typedef  LPCSTR  LPCTSTR;

  #endif

   

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC操作INI文件 下一篇C/C++使用lua用例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)