码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-26 09:19:34      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

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

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


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

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


再来说说字符集。

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

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

至于为什么会有Unicode字符集,主要是因为8位的Ansi字符集最多可以表示256个字符,仅满足极少部分地区的使用要求,如英美,像我国等,汉字+符号,好多,256个字符远远不够。


值得一提的是,Unicode形式的字符竟是以小端存储的。不多说,见代码:

运行结果:

技术分享




VS2013还不支持char16_t(C++11)!这段代码是在http://cpp.sh/上编译运行的的,这个网页很强大,对C++的新特性支持得也很好。


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

标签:

原文地址:http://blog.csdn.net/u013547361/article/details/46642129

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!