探究VC下的_T(""),发现:双字节字符/多字节字符是以小端存储的(至少是在VC2013环境下)

本文探讨了从VC6.0到VS2013的字符处理变化,重点在于_T("")宏在Unicode和Ansi字符集间的兼容作用。在VC2013中,默认采用Unicode字符集,其中字符以双字节小端存储。Unicode的引入是为了应对Ansi字符集256字符限制,而VS2013未支持C++11的char16_t类型。
摘要由CSDN通过智能技术生成

从VC6.0过渡到VS2013的程序员应该都会对字符的表现形式感到困惑,每每都要使用_T(""),才能如愿地显示字符。

其实_T("")是一个宏,起一个兼容的作用,使编译器采用默认的字符集形式(Ansi或Unicode)编译字符串。


在VC2013的 tchar.h 文件中,我提取出了部分代码,如下:

#ifdef _UNICODE
// ...
#define __T(x)      L ## x
// ...
#else
// ...
#define __T(x)      x
// ...
#endif	/* _UNICODE */

// ...
#define _T(x)       __T(x)
#define _TEXT(x)    __T(x)
这部分代码非常直观,当采用Unicode字符集时,编译器就将_T("")中的字符串编译成Unicode形式,当采用Ansi字符集时,编译器就将_T("")中的字符串编译成Ansi形式。


再来说说字符集。

Windows下使用两种字符集,Unicode和Ansi。当前的Windows环境下,Unicode字符集以双字节形式储存,Ansi以单字节形式存储(也就是8位的char)。

据我了解,VC6.0编译器默认采用Ansi字符集,VS2010还是从哪一版本开始的,就默认采用Unicode字符集了。

至于为什么会有Unicode字符集,主要是因为8位的Ansi字符集最多可以表示256个字符,仅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值