c语言unicode数组,Unicode下的C语言语法

Unicode扩展自ASCII字符集,在严格的ASCII中,每个字符用7位表示,在计算机中使用8位宽。ASCII字符集中,只含有美国英语常用的字符,就是一个美国标准,对于其他使用英语的国家,很多字符都没有编码,比如英镑的符号。更不用说中日韩(CJK)国家的汉字系统。

因此,为了解决程序可以在不同字符的系统中使用,C程序的一些数据类型需要进行相应的更改来符合Unicode标准,比如ANSI

C(ASCII标准)中char类型,字宽为一个字节(8位),也就是说使用sizeof(char)返回值是1。在Unicode标准中,字符字宽为1一个字(16位),使用关键词wchar_t表示,该关键词在WCHAR.H头文件中定义如下:

typedef

unsigned short wchar_t;

也就是说,在Unicode中,宽字符即无符号整型。那么,使用sizeof(wchar_t)返回值就是2。如下:

a4c26d1e5885305701be709a3d33442f.png

那么,随之而来的问题就是新版本的char类型,怎样访问ASCII版的库函数。举一个例子来说,比如字符串长度函数strlen(在string.h中定义),对于char类型:

char *p1 =

“ASCII\n”;

iLength =

strlen(p1);

这样写没有任何问题,iLength的结果为p1字符串长度6。如果定义宽字符串:

wchar_t *p2=

“Unicode\n”;

iLength =

strlen(p2);

我们会发现:

error C2664:

“strlen”: 不能将参数1 从“wchar_t *”转换为“const char *”

原因是wchar_t实际为uint类型,strlen接受的类型为char,这就出现了上面的问题。

当然,为了支持Unicode,char.h中重写了一些字符串库函数,对于strlen,其新函数名为wcslen(wide-character

string length),使用如下:

wchar_t *p2

= “Unicode\n”;

iLength =

wcslen(p2);

iLength的结果为Unicode\n字符串的长度8。

为了在ASCII和Unicode中统一表示,字符串库函数在char.h中进行了通用的命名,比如char类型统一为TCHAR也就是,如果定义了_UNICODE标识符(Unicode编码),那么TCHAR就被翻译为wchar_t,否则,就被定义为char。再比如,_tcslen函数,如果定义了_UNICODE标识符,那么就被翻译为wcslen,否则就被翻译为strlen函数。

对于字符L的解决,通过_T(或者__T或者_TEXT)来完成,如果定义了_UNICODE标识符,那么,定义:

#define

_T(x) L##x;

这句话的意思就是将L字符黏贴到x前面。“##”为粘贴符号(token paste)。

如果没有定义_UNICODE,那么,宏定义格式就为:

#define

_T(x) x;

那么,统一版本的字符变量声明就为:

TCHAR *P =

_TEXT(“WHAT\n”);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值