TCHAR 认识整理

定义

TCHAR是通过define定义的字符串宏


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

  当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wcslen

       (_tcscmp)

  当我们定义了UNICODE宏,就相当于告诉了编译器:我准备采用UNICODE版本。这个时候,TCHAR就会摇身一变,变成了wchar_t。而未定义UNICODE宏时,TCHAR摇身一变,变成了unsigned char 。这样就可以很好的切换宽窄字符集。
  tchar可用于双字节字符串,使程序可以用于中日韩等国 语言文字处理、显示。使编程方法简化。

另:
tchar可用于双字节字符串,使程序可以用于中日韩等国 语言文字处理、显示。使编程方法简化。


感谢:百度百科

03-17
### 关于 `TChar` 的定义与使用 在 C++ Builder 中,`TCHAR` 是一种字符类型的宏定义,主要用于支持 Unicode 和 ANSI 字符串之间的兼容性。它通常被用来表示单个字符,在不同的编译选项下可以映射到不同长度的数据类型。 #### 宏定义解释 当项目设置为 ANSI 编码时,`TCHAR` 被定义为普通的 `char` 类型;而如果启用了 Unicode 支持,则会将其定义为宽字符类型 `wchar_t`[^1]。 以下是常见的条件判断方式: ```cpp #if defined(_UNICODE) || defined(UNICODE) typedef wchar_t TCHAR; #else typedef char TCHAR; #endif ``` 这种设计使得开发者可以在不修改大量代码的情况下切换编码模式,从而适应不同的操作系统需求或国际化场景。 #### 基本用法示例 下面展示如何声明并操作基于 `TCHAR` 的字符串: ```cpp #include <vcl.h> #pragma hdrstop void ExampleFunction() { // 单独的字符处理 TCHAR singleCharacter = _T('A'); // 动态分配内存给一个数组形式的字符串 int lengthOfString = 20; TCHAR *dynamicString = new TCHAR[lengthOfString]; // 初始化动态创建的内容为空白状态 memset(dynamicString, 0, sizeof(TCHAR)*lengthOfString); // 将固定文本复制进去 String fixedText = _T("Sample Text"); wcscpy_s(dynamicString, lengthOfString, (const WCHAR*)fixedText.c_bstr()); delete[] dynamicString; } /* End of 'ExampleFunction' function */ ``` 上述例子中展示了几个要点: - `_T()` 宏能够自动转换常量值至适合当前环境的形式。 - 对象销毁前记得释放资源以防止泄漏问题发生。 另外需要注意的是,由于现代 Windows API 更倾向于完全采用 UTF-16 LE 表达法(即对应于 C/C++中的 `wchar_t`),所以在新开发工作中推荐始终开启Unicode标志位来充分利用这一特性[^3]。 #### 结合实际控件应用案例 假设我们要自定义绘图区域上的鼠标交互行为,可能涉及到重载某些虚函数如前面提到过的 `MouseDown`, 这时候参数列表里就会包含像这样的签名片段——其中就包含了我们讨论的主题之一:`Controls::TMouseButton Button`. 此时传入的具体按键信息会被封装成枚举值传递过来供进一步解析利用. 同样地,在构建跨平台解决方案或者考虑未来迁移路径的时候也要充分考虑到目标平台上对于基本数据单元大小约定是否存在差异等因素影响最终效果呈现.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值