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.net.ConnectException: Connection refused: connect

    解决: java.net.ConnectException: Connection refused: connectjava.net.ConnectException:Connectionrefused:connect1.报错如上。2.原因和解决:1)端口号被占用:杀死占用端口号(一般为8080)的进程,释放端口;彻底关闭Tomcat服务器,或者重新启动项目。2)使用以下命令检查服务器中允许的最大进程数:ulimit-u。如果将此值设置为较低值,例如1024,则使用以下…

    2022年4月30日
    43
  • 赛门铁克卸载工具CleanWipe14亲测有效

    赛门铁克卸载工具CleanWipe14亲测有效卸载烦人的赛门铁克,把我恶心坏了,不过最后卸载了。找了很多方法,都很麻烦,自己试了试也没成功。。。然后找到了一个CleanWipe14的卸载工具网盘,然后成功卸载!!!网盘链接:https://pan.baidu.com/s/13nOA83ngCaxLN4h627-oyQ提取码:dkck原文:https://www.52pojie.cn/thread-1071900-1-1.html…

    2022年6月14日
    53
  • 常见状态码

    常见状态码常见状态码

    2022年4月22日
    47
  • 表单提交时验证数据是否为空[通俗易懂]

    表单提交时验证数据是否为空[通俗易懂]一、利用submit按钮实现提交,当点击submit按钮时,触发onclick事件,由JavaScript里函数判断输入内容是否为空,如果为空,返回false,不提交,如果不为空,提交到由action指定的地址。<scripttype=”text/javascript”>functioncheck(form){if(form…

    2025年11月12日
    3
  • Java 构造函数的详解

    Java 构造函数的详解我们人出生的时候,有些人一出生之后再起名字的,但是有些人一旦出生就已经起好名字的。那么我们在java里面怎么在对象一旦创建就赋值呢?1.构造方法的作用:构造方法作用:对对象进行初始化.如图:2.构造函数与普通函数的区别:(1). 一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初

    2022年7月8日
    24
  • p750tm安装linux系统,Android 开发环境(虚拟机,LINUX, secureCRT)安装过程.pdf

    p750tm安装linux系统,Android 开发环境(虚拟机,LINUX, secureCRT)安装过程.pdfAndroid开发环境(虚拟机,LINUX,secureCRT)安装过程Androidlinux开发环境(虚拟机,LINUX,secureCRT)安装过程注意由于selinux打开,smb不能正常工作。Windows不能够访问虚拟机,要关闭selinux才能正常访问。解决方法:vi/etc/sysconfig/selinuxSELINUX=enforcing–>…

    2022年6月18日
    24

发表回复

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

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