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表示这个变量是一个字符串

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • js数组添加数据和删除数据

    js数组添加数据和删除数据1.栈方法(1).push():向Array的末尾添加若干元素;(2).pop()函数:删除数组中的最后一个数据vararr=[1,2,3,4];arr.push(6,7,8);//push压栈向数组末尾添加元素console.log(arr);//arr=[1,2,3,4,6,7,8];vararr1…

  • c语言之 malloc函数详解「建议收藏」

    c语言之 malloc函数详解「建议收藏」c语言之malloc函数详解一、原型:externvoid*malloc(unsignedintnum_bytes);头文件:#include或#include(注意:alloc.h与malloc.h的内容是完全一致的。)功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL

  • gawk

    gawk简介awk报告生成器,作用格式化文本输出:awk分为awk.nawk.gawk。但是linux上的awk为gawk基本用法gawk[options]'program'

  • clion激活码(注册激活)

    (clion激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~08G05E7DZH-eyJsaWNlb…

  • git上项目代码拉到本地方法

    git上项目代码拉到本地方法1、先在本地打开workspace文件夹,或者自定义的文件夹,用来保存项目代码的地方。2、然后登陆GitHub账号,点击复制项目路径3、在刚才文件夹下空白处点击鼠标右键,打开Git窗口4、在以下页面中输入命令gitclone加刚才复制的路径,如下图(可能Ctrl+V用不了,可以用右键选择Paste完成复制)5、输入完命令行之后回车就行,等待下载完毕,然后是切换…

  • 如何遍历ArrayList集合,并安全删除其中的元素[通俗易懂]

    如何遍历ArrayList集合,并安全删除其中的元素[通俗易懂]如何遍历ArrayList集合,并安全删除其中的元素?1、遍历ArrayList集合有三种方式(1)for循环(2)增强for循环,也就是foreach(3)迭代器iterator2、普通for循环遍历删除元素,list集合的大小会变小,而索引也会发生改变,所以利用ffor循环遍历删除元素会漏调某些元素。例如我for循环遍历删除第一个元素,接着按照…

发表回复

您的电子邮箱地址不会被公开。

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