tchar ANSI编码 Unicode编码「建议收藏」

tchar ANSI编码 Unicode编码「建议收藏」因为C++支持两种字符串,即常规的ANSI编码(使用””包裹)和Unicode编码(使用L””包裹),这样对应的就有了两套字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T(“”)这样的字符串,对应的就有了_tcslen这样的函数为了存储这样

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

    因为C++支持两种字符串,即常规的
ANSI
编码(使用””包裹)和
Unicode
编码(使用L””包裹),这样对应的就有了两套字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串
    微软将这两套
字符集
及其操作进行了统一,通过
条件编译
(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T(“”)这样的字符串,对应的就有了_tcslen这样的函数
    为了
存储
这样的通用
字符
,就有了TCHAR,tchar是通过define定义的字符串宏:
    当没有定义_UNICODE宏时,TCHAR = char,_tcslen =
strlen
    当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wcslen
    当我们定义了UNICODE宏,就相当于告诉了
编译器
:我准备采用UNICODE版本。这个时候,
TCHAR
就会摇身一变,变成了wchar_t。而未定义UNICODE宏时,TCHAR摇身一变,变成了unsigned  char。这样就可以很好的切换宽窄
字符集
           
tchar
可用于双
字节
字符串,使程序可以用于中日韩等国 语言文字处理、显示。使编程方法简化。
 
—————————————————————
补充:_T(“”)的含义
定义:
_T(“”)是一个宏,定义于tchar.h下。
#define __T(x) L ## x
#define _T(x) __T(x)
作用:
他的作用是让你的程序支持Unicode编码,
因为Windows使用两种
字符集
ANSI和UNICODE,
前者就是通常使用的单
字节
方式,
但这种方式处理象中文这样的双
字节
字符
不方便,
容易出现半个汉字的情况。
而后者是双
字节
方式,方便处理双字节
字符
Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。
如果你编译一个程序为ANSI方式,
_T实际不起任何作用。
而如果编译一个程序为UNICODE方式,则编译器会把”Hello”字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存。
LPSTR:32bit
指针
指向一个
字符
串,每个字符占1
字节
LPCSTR:32-bit
指针
指向一个常
字符
串,每个字符占1
字节
LPCTSTR:32-bit
指针
指向一个常
字符
串,每字符可能占1
字节
或2字节,取决于Unicode是否定义
LPTSTR:32-bit
指针

字符
可能占1
字节
或2字节,取决于Unicode是否定义
L是表示字符串资源为Unicode的。
比如
wchar_t
Str[] = L”Hello World!”;
这个就是双字节存储字符了。
_T是一个适配的宏~
#ifdef _UNICODE的时候
_T就是L
没有#ifdef _UNICODE的时候
_T就是ANSI的。
比如
LPTSTR lpStr = new TCHAR[32];
TCHAR* szBuf = _T(“Hello”);
以上两句使得无论是在UNICODE编译条件下还是在ANSI编译条件下都是正确编译的。
而且MS推荐你使用相匹配的
字符串函数
比如处理LPTSTR或者
LPCTSTR
的时候,不要用strlen ,而是要用_tcslen
否则在
UNICODE
的编译条件下,strlen不能处理
wchar_t
*的字符串。
T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()…),它表示使用一种中间类型,既不明确表示使用 MBCS,也不明确表示使用 UNICODE。那到底使用哪种
字符集
?编译的时候才决定
***********************************************************************************************************************************************************
LPCTSTR类型:
L表示long
指针 这是为了兼容Windows 3.1等16位
操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far
修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
T表示在Win32环境中, 有一个_T宏
STR表示这个变量是一个字符串

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190243.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java计时器StopWatch「建议收藏」

    java计时器StopWatch「建议收藏」  1、一般我们检测某段代码执行的时间,都是以如下方式来进行的:publicstaticvoidmain(String[]args){longstartTime=System.currentTimeMillis();//获取开始时间//函数主体代码longendTime=System.currentTimeMi…

    2022年6月23日
    26
  • 程序员15k什么水平_初级码农

    程序员15k什么水平_初级码农前言大家好啊,我是秃顶的码哥!又是一年一度的高校毕业季,不少计算机专业的大学生已经踏上了求职之路,码哥我也想起了那天夕阳西下的奔跑,那是我逝去的青春啊!还记得我们那批同学毕业时,一起憧憬自己拿到15k、20K薪资的情景,但实际上,我们中绝大大部分的同学工作好几年了,还只是个拿几千工资的低级码农。现在码哥作为一枚已经秃顶的互联网行业老油条,下面就和大家分享一下如何避免成为低级码农的个人经验吧!以下几点如果你都能做到,月薪20k其实并不难哦!第一、多看计算机相关的书籍。读书一直是世界上性价比

    2022年9月30日
    4
  • s3c2440时钟频率

    s3c2440时钟频率分类:LINUX++++++++++++++++++++++++++++++++++++++++++本文系本站原创,欢迎转载!转载请注明出处:http://blog.csdn.net/mr_raptor/article/details/6555734++++++++++++++++++++++++++++++++++++++++++系统时钟MINI2440开发板

    2022年6月14日
    27
  • Python一.Python安装及环境配置(完整教程)「建议收藏」

    Python一.Python安装及环境配置(完整教程)「建议收藏」Windowns操作系统中安装Python一.下载Python1.python官网:https://www.python.org/downloads/下载安装包2.选择版本我这里用安装版(64位)二.双击安装1.这里勾选安装并添加到PAHT,下一步。一直默认就可以安装完成2、查看环境变量是否有python的环境变量在命令窗口输入python-V回车如果出现python版本,那么恭喜…

    2022年5月31日
    39
  • mybatis log plugin 激活码[免费获取]

    (mybatis log plugin 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月22日
    167
  • C语言strcat()函数:连接字符串

    C语言strcat()函数:连接字符串

    2021年9月11日
    81

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号