c++中LPCTSTR,LPTSTR 解释
char是C语言标准数据类型,字符型,至于由几个字节组成通常由编译器决定,一般一个字节。Windows为了消除各编译器的差别,重新定义了一些数据类型,你提到了另外几个类型都是这样。CHAR为单字节字符。还有个WCHAR为Unicode字符,即不论中英文,每个字有两个字节组成。它实际定义在<string.h>里: typedef unsigned short wchar_t。
下面在看看TCHAR。如果你希望同时为ANSI和Unicode编译的源代码,那就要include TChar.h。TCHAR是定义在其中的一个宏,它视你是否定义了_UNICODE宏而定义成char或者wchar_t。如果当前编译方式为ANSI(默认)方式,TCHAR等价于CHAR,如果为Unicode方式,TCHAR等价于WCHAR。
不能使用类似strcpy这样的ANSI C字符串函数来处理wchar_t字符串,必须使用wcs前缀的函数,例如wcscpy。为了让编译器识别Unicode字符串,必须以在前面加一个“L”,例如:
wchar_t *szTest=L"This is a Unicode string.";
如果你使用了TCHAR,那么就不应该使用ANSI的strXXX函数或者Unicode的wcsXXX函数了,而必须使用TChar.h中定义的_tcsXXX函数。另外,为了解决刚才提到带“L”的问题,TChar.h中定义了一个宏:“_TEXT”。
以strcpy函数为例子,总结一下:
.如果你想使用ANSI字符串,那么请使用这一套写法:
char szString[100];
strcpy(szString,"test");
.如果你想使用Unicode字符串,那么请使用这一套:
wchar_t szString[100];
wcscpyszString,L"test");
.如果你想通过定义_UNICODE宏,而编译ANSI或者Unicode字符串代码:
TCHAR szString[100];
_tcscpy(szString,_TEXT("test"));
在当前版本LPCSTR和LPSTR没区别,即以零结尾的字符串指针,相当于CHAR *。
LPCSTR A 32-bit pointer to a constant character string.
常量指针,一般用于参数传递和固定字符串
LPSTR A 32-bit pointer to a character string.
普通指针,一般用于字符串操作
根据DBCS或Unicode 自动选择char或wchar_t类型,由定义的宏_UNICODE决定
LPCTSTR A 32-bit pointer to a constant character string that is portable for Unicode and DBCS.
LPTSTR A 32-bit pointer to a character string that is portable for Unicode and DBCS.
一个转换CString 的例子。
CString str = "ABC";
LPCTSTR ptr1 = new TCHAR[str.GetLength()+1];
ptr1 = (LPCTSTR) str.GetBuffer();
LPTSTR ptr2 = new TCHAR[str.GetLength()+1];
ptr2 = (LPTSTR) str.GetBuffer();
LPSTR ptr3 = new char[str.GetLength()+1];
ptr3 = (LPSTR) str.GetBuffer();
LPCSTR ptr4 = new char[str.GetLength()+1];
ptr4 = (LPCSTR) str.GetBuffer();
另外,要注意选用的函数也要和string类型一致。比如下面:tmp1=144,tmp2=1,因为sLastChan为宽字节,存储为310034003400, atoi函数遇到第一个"00"就会结束。
CString sLastChan = _T("144");
int tmp1 = _tstoi((TCHAR*)sLastChan.GetBuffer(sLastChan.GetLength()));
tmp2 = atoi((char*)sLastChan.GetBuffer(sLastChan.GetLength()));
//百科
由于Win32 API文档的函数列表使用函数的常用名字(例如, SetWindowText"),所有的字符串都是用TCHAR来定义的。(除了XP中引入的只适用于Unicode的API)。
LPTSTR解释
编辑
表示指向字符/字符串的指针。WINDOWS 下面的程序设计可以支持MBCS和UNICODE两种编码的字符串,具体用那种就看你定义了MBCS宏还是UNICODE宏。MBCS宏对应的字符串指针 是char*也就是LPSTR,UNICODE对应的指针是unsigned short*也就是LPWSTR,为了写程序方便微软定义了类型LPTSTR,在MBCS下它就是char*,在UNICODE下它是unsigned char*,这样你就可以重定义一个宏进行不同字符集的转换了。
LP:长指针(long pointer)。
T:win32环境中有一个_T宏,用来标识字符是否采用Unicode编码(两字节表示一个字符),若程序中定义了Unicode,该字符/字符串被作为Unicode字符串,否则就是标准的ANSI(单字节表示一个字符)字符串。
STR:表示这个变量是一个字符串。
/* LPTSTR 转换成 CString */
(1)直接赋值
CString strText;
LPTSTR lpszText = _T("LPTSTR >> CString");
strText = lpszText;
::MessageBox( NULL, strText , _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
(2)CString::Format()格式化
CString strText;
LPTSTR lpszText = _T("LPTSTR >> CString");
strText.Format( _T("%s"), lpszText );
::MessageBox( NULL, strText , _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
/* CString 转换成 LPTSTR */
(1)强制转换
CString strText( _T("This is a test") );
LPTSTR lpszText =(LPTSTR)(LPCTSTR)strText;
::MessageBox( NULL, lpszText, _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
(2)使用lstrcpy()
CString strText( "This is a test" );
LPTSTR lpszText = new TCHAR[strText.GetLength()+1];
lstrcpy( lpszText, strText );
::MessageBox( NULL, lpszText, _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
(3)使用CString::GetBuffer()
CString strText(_T("This is a test "));
LPTSTR lpszText = strText.GetBuffer();
strText.ReleaseBuffer();
::MessageBox( NULL, lpszText, _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
/* char * 转换成 CString
char chArray[] = "This is a test";
char * p = "This is a test";
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;
/* CString转换成char*
1.
CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
2.
CString s(_T("Char test "));
LPTSTR p = s.GetBuffer(); [1]
LPTSTR dot = strchr(p, ''.'');
// 在这里添加使用p的代码
if(p != NULL)
*p = _T('');
s.ReleaseBuffer();
c++中LPTSTR
编辑
LPCTSTR,LPWSTR, PTSTR, LPTSTR,wchar_t区别
L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP与P是等效的。
P表示这是一个指针。
T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
STR表示这个变量是一个字符串。
C表示是一个常量,const。
LPTSTR:
如果定义了UNICODE宏则LPTSTR被定义为LPWSTR。typedef LPTSTR LPWSTR;
否则LPTSTR被定义为LPSTR。 typedef LPTSTR LPSTR;
下面列出一些常用的typedefs:
类型 MBCS Unicode
WCHARwchar_twchar_t
LPSTR char* char*
LPCSTR const char* const char*
LPWSTRwchar_t* wchar_t*
LPCWSTR constwchar_t* const wchar_t*
TCHAR charwchar_t
LPTSTR TCHAR*(或char*) TCHAR* (或wchar_t*)
LPCTSTR const TCHAR* const TCHAR*
所以结论,在VS2005系统中,为提高可移植性,定义字符串时用TCHAR,转化为UNICODE时用_T而不用L。
c++中LPCTSTR,LPTSTR 解释相关推荐
- 理解VC++中LPCTSTR的含义
1.定义文件中的声明 2.百度百科显示: LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串 ...
- 在C#代码中应用Log4Net 中配置文件的解释
一个完整的配置文件的例子如下所示,这个是"在C#代码中应用Log4Net(二)"中使用的配置文件. <log4net><!-- 错误日志类--><lo ...
- css flexbox模型_CSS Flexbox在全国范围内的公路旅行中得到了解释
css flexbox模型 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) CSS Flexbox在全国范围内的公路旅行中得到了解释 (CSS Flexbox ...
- 堆叠自编码器中的微调解释_25种深刻漫画中的编码解释
堆叠自编码器中的微调解释 by freeCodeCamp 通过freeCodeCamp 25种深刻漫画中的编码解释 (Coding Explained in 25 Profound Comics) W ...
- 深入理解Python中的全局解释锁GIL
深入理解Python中的全局解释锁GIL 转自:https://zhuanlan.zhihu.com/p/75780308 注:本文为蜗牛学院资深讲师卿淳俊老师原创,首发自公众号https://mp. ...
- CString LPCTSTR LPTSTR 类型的相互转化
CString LPCTSTR LPTSTR 类型的相互转化 // 変数定義 LPTSTR s_t; LPCTSTR s_ct; CString str; CString sResul ...
- [翻译]CryEngine3中裁剪剔除解释
CryEngine3中裁剪剔除解释 概述 在3D渲染方面早期的裁剪主要是描述了各类物体(Objects ,drawcalls,Triangles和 Pixels)被剔除,不会显示到最终图像的.在渲染管 ...
- Word中公式变量解释时破折号对齐方法
写文章,尤其是工科论文,时常要用到公式,对公公式中的符号解释对齐会遇到问题,下面收集一些我的解决方法.对弈要其如图 需要变量解释按照破折号左侧对齐. 方法一 使用表格,再将表格边框设为无边框模式 方法 ...
- SAP 生产订单/流程订单中日期的解释
SAP 生产订单/流程订单中日期的解释 基本开始日期:表示订单的开始日期 基本完成日期:表示订单的完成日期 我们在输入基本开始日期和基本完成日期时需要关注 调度 下面的"类型",其 ...
最新文章
- JavaScript创建对象的两种方法和遍历对象的属性
- pytorch与keras_Keras vs PyTorch:如何通过迁移学习区分外星人与掠食者
- Selenium3自动化测试——18.窗口截图
- Edge Linking
- python列表添加元组_【Python爬虫】列表、元组、集合练习
- Spring.Net的IOC入门
- 查看tp框架版本方法
- PPT(十)-动画基础知识学习
- 课后作业-阅读任务-阅读提问-4
- iText制作表格比较好的文章
- php 26进制转10进制,PHP 10进制转62进制
- 学生签到系统c代码_c语言学生签到
- 解决 Win11 开机ctfmon.exe不能自启
- 计算机重装系统桌面文件如何恢复,电脑重装系统后怎么恢复原来的文件方法
- 计算机应用技术一班班徽,1班班徽设计图片大全欣赏
- Windows Live Writer插件:在WLW中插入语法高亮代码
- 北京汽车摩托车年检查询指南(工作时间、最近检测厂、联系电话)
- 广告点击流量实时统计
- FPS游戏:视角 4*4 矩阵的特点
- 千万不要去这些公司面试!