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的。
比如
这个就是双字节存储字符了。
_T是一个适配的宏~
当
#ifdef _UNICODE的时候
_T就是L
没有#ifdef _UNICODE的时候
_T就是ANSI的。
比如
LPTSTR lpStr = new TCHAR[32];
TCHAR* szBuf = _T(“Hello”);
以上两句使得无论是在UNICODE编译条件下还是在ANSI编译条件下都是正确编译的。
比如处理LPTSTR或者 LPCTSTR 的时候,不要用strlen ,而是要用_tcslen 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表示这个变量是一个字符串
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190243.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...