首先在编译程序时经常会遇到这种问题:

错误 1 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [3]”转换为“LPCTSTR”

1、觉得很烦,一般的做法就是不管三七二十一,在字符串前面加一个‘L’:
如调用函数FUN(LPCTSTR str)时,不能  FUN("HELLO"); 而是FUN(L"HELLO");
通常这样做都比较能解决问题。

2、或者还可以用_T(), 即 FUN(_T("HELLO"));   _T() 的别名还有 _TEXT(), TEXT()。

稍微研究了下,BSTR,LPSTR,LPWSTR,LPCTSTR,LPTSTR等这些让人头晕的东东。(还是C#里简单啊,直接tostring)

BSTR:是一个OLECHAR*类型的Unicode字符串,是一个COM字符串,带长度前缀,与VB有关,没怎么用到过。
LPSTR:即 char *,指向以'/0'结尾的8位(单字节)ANSI字符数组指针
LPWSTR:即wchar_t *,指向'/0'结尾的16位(双字节)Unicode字符数组指针
LPCSTR:即const char *
LPCWSTR:即const wchar_t *
LPTSTR:LPSTR、LPWSTR两者二选一,取决于是否宏定义了UNICODE或ANSI
LPCTSTR: LPCSTR、LPCWSTR两者二选一,取决于是否宏定义了UNICODE或ANSI。

如下是从MFC库中拷来的:

#ifdef UNICODEtypedef LPWSTR LPTSTR;typedef LPCWSTR LPCTSTR;
#elsetypedef LPSTR LPTSTR;typedef LPCSTR LPCTSTR;
#endif 

3、相互转换方法:
前面需要定义:

USES_CONVERSION;

转换方法:

LPWSTR->LPTSTR:   W2T();
LPTSTR->LPWSTR:   T2W();
LPCWSTR->LPCSTR: W2CT();
LPCSTR->LPCWSTR: T2CW();
ANSI->UNICODE:     A2W();
UNICODE->ANSI:     W2A();

另外,CString转为CStringW方法(通过一个wchar_t数组来转)

 CString str;CStringW strw;wchar_t *text = new wchar_t[sizeof(wchar_t) * str.GetLength()];MultiByteToWideChar(CP_ACP,0,str,-1,text,str.GetLength());strw = text;

4、另外,还可以强行转换,不过不一定能成功

5、还有_bstr_t ( 对BTSTR的封装,需要#include<comdef.h> ),也可将单字节字符数组指针转为双字节字符数组指针,还没怎么没用到过。

原文链接:http://blog.csdn.net/jize00/article/details/4379478

LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化相关推荐

  1. cstringw转lpctstr_CString 和 LPCTSTR 之间的转换 及 LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化...

    CString 和 LPCTSTR 可以说通用. 原因在于CString定义的自动类型转换,没什么奇特的,最简单的C++操作符重载而已. 常量字符串ansi和unicode的区分是由宏_T来决定的.但 ...

  2. CString 和 LPCTSTR 之间的转换 及 LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化

    欢迎大家有空可以看下我的http://ltdzhuwai.taobao.com 今天在写代码的时候碰到这样的问题,网上查了一下,做了以下整理: CString   和   LPCTSTR   可以说通 ...

  3. LPSTR/LPCSTR/LPWSTR/LPCWSTR/LPTSTR/LPCTSTR字符串指针

    LPSTR = char* LPCSTR = const char*LPWSTR = wchar_t* LPCWSTR = const wchar_t*LPTSTR = char* or wchar_ ...

  4. LPSTR,LPCSTR,LPWSTR,LPCWSTR,LPTSTR,LPCTSTR转换

    LPSTR char* LPCSTR const char* LPWSTR                wchar_t* LPCWSTR const wchar_t* LPTSTR TCHAR* L ...

  5. LPSTR、LPCSTR、LPTSTR和LPCTSTR的意义及区别

    1.ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式.ANSI表示英文字母时就和 ASCII一样,但表示其他文字时就需要用多字节. 2.Unicode:用两个字节表示一个字符的 ...

  6. 关于LPSTR、LPCSTR、LPTSTR和LPCTSTR

    LPSTR: 指向一个字符串的32位指针,每个字符占1个字节. LPCSTR:指向一个常量字符串的32位指针,每个字符占1个字节. LPTSTR:指向一个字符串的32位指针,每个字符可能占1个字节或2 ...

  7. 几种字符集与LPTSTR、LPCSTR、LPSTR、LPCTSTR、LPWSTR、LPCWSTR的意义

    1.几种字符集: 所有的string类都是以C-style字符串为基础的.C-style字符串是字符数组.字符类型有三种编码格式: SBCS: 第一种是单字节字符集(single byte chara ...

  8. 关于char, wchar_t, TCHAR, _T,L,TEXT,_TEXT,LPSTR,LPCSTR,PWSTR,PCWSTR,LPTSTR,LPCTSTR的区别

    #ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned char TCHAR; #endif typedef unsigned cha ...

  9. What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?

    2019独角兽企业重金招聘Python工程师标准>>> http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR- ...

最新文章

  1. c4d完全学习手册_动态视觉设计就业班,全商业项目实训,一线制作团队10人小班授课,持续提升学习...
  2. Eclipse导入项目常见问题----服务器版本问题02
  3. asp.net webform 使用 html partial,ASP.NET Web Forms
  4. 如何修改vs2008代码字体
  5. c++ 使用nacos_《Nacos系列》之注册中心
  6. 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现
  7. Python精通-Python学习路线详细介绍
  8. 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(2)
  9. 一个关于 客户端非法取消正在进行的数据提交操作 的问题 的讨论
  10. linux+模块与设备关系,linux内核设计与实现读书笔记——设备和模块
  11. mysql 随机取不重复数据_随机生成不重复数字,想做Excel抽奖器你必须掌握!
  12. cloudflare免费设置_Cloudflare 入门教程:使用 Cloudflare 免费 CDN 加速 amp; 保护自己的网站...
  13. WPF界面框架的设计
  14. maya mentray_新手快速掌握Maya Mental ray
  15. Ubuntu安装网络打印机
  16. 通用计算机的通用性如何体现,计算机的通用性表现在哪方面
  17. n11mysql表设计_n11(n11数据库管理工具)
  18. 基于PHP美食食谱的外文翻译,翻译研究 | 中文菜谱英文翻译方法详解
  19. PTA 1107 老鼠爱大米(C++实现)
  20. 3.6 使用透视裁剪工具修复透视图 [Ps教程]

热门文章

  1. EncryptHelper
  2. CCF201604-1 折点计数(100分)【序列处理】
  3. CCF201509试题
  4. HDU1249 三角形【切割平面】
  5. HDU1272 小希的迷宫【并查集】
  6. Effective Java(一)—— 创建和销毁对象
  7. Python Tricks(三)—— 计算误分率
  8. Python 技巧(三)—— list 删除一个元素的三种做法
  9. 程序结构程序设计(二)
  10. thinkphp5 图片压缩旋转_有非常多的图片,该怎么制作PPT?