vs中ANSI编码和UNICODE编码及二者的兼容性问题

ANSI编码的字符集是多字符集,也就是每个字符的编码宽度不相等。

UNICODE编码的字符集是宽字符集,每个字符的编码都是两个字符。

有些操作系统仅支持多字符集,有些操作系统仅支持宽字符集,当然更多的操作系统是两种字符集都支持。为了兼容两种字符集,vs编译器为使用宏定义的方法来选择编译成多字符集还是宽字符集,下面分别介绍:

1.多字符集(ANSI)

字符型是char    const char*型是LPCSTR

对应的一些字符串相关函数:MessageBoxA(),strcpy(),strcat(),strlen()  (注:以str开头)

2.宽字符集(UNICODE)

字符型是wchar_t    const char*型是LPCWSTR

对应的一些字符串相关函数:MessageBox(),wcscpy(),wcscat(),wcslen();  (注:以wcs开头)

3.兼容字符集

兼容字符集要包含头文件<tchar.h>

字符型是TCHAR

如果是多字符型编译,就把宏展开成char;如果是宽字符集编译,就把宏展开成wchar_。

对于const char*要放在_T()宏定义中。比如:_T("Hello World!")。

那么如果选择了多字符编译,就把宏展开成"Hello World!";如果是宽字符编译,就把宏展开成L"Hello World!"

对应的一些字符集相关函数:MessageBox(),

_tcscpy(),_tcscat(),_tcslen()  (注:以_tcs开头,是C运行时库)

或者lstrcpy(),lstrcat(),lstrlen()  (注:以lstr开头,是Windows函数)。

兼容字符集的宏定义在头文件<tchar.h>中,部分代码如下所示:

#ifdef __UNICODE
    #define _tcslen  wcslen
    #define TCHAR wchar_t
    #define LPTSTR wchar_t*
    #define _T(x)  L##x
#else
    #define _tcslen  strlen
    #define TCHAR char
    #define LPTSTR char*
    #dfine   _T(x)    x
#endif



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值