DBCS ,宽字符与unicode

在小型计算机开发的初期,就已经严格地建立了8位字节最多表示256个字符,但是中国日本和韩国的象形文字符号大约有约21000个,ASCII是无法表示的,因此提出了双字节字符集DBCS(double-byte character set),它从256开始,只有为日文,简体中文,韩语,繁体中文提供的windows版本才支持DBCS,双字符集并不是说字符由两个字节代表,有些字符还是由一个字节表示的,这会引起附加的程序设计问题.

Unicode是更好的解决方案,Unicode是统一的16位系统,足以表示世界上所有的语言文字,它的前128个字符也正好对应着ASCII字符,缺点在于占用两倍的内存。

宽字符是用与C语言支持多字节:

 

char数据形态

char c = 'a';//8

char *p = "hello!";

 

宽字符

typdef unsigned short wchar_t;//16

wchar_t c = 'A';在内存中是:0x41 0x00的形式

wchar_t *p = L"Hello!";sizeof(p) = 14

 

宽字符链接库函数的不同

 

char *pc = "hello!";

int len = strlen(pc);

我们得到len值为6,没有任何问题,

但是:

wchar_t * pw = L"hello!";

int lenw = strlen(pw);

我们将得到:

'function' : incompatible types - from 'unsigned short *' to 'const char *'

这样的警告或错误提示,因为strlen函数的参数指示要传入char类型,却传入了unsigned int 类型

事实上这种情况还存在于很多地方,不过不用担心宽字符版本的函数别人已经为我们写好了

如:

size_t _cdecl strlen(const char*);

宽字符版本:

size_t _cdecl wcslen(const wchar_t*);

需要注意的是sizeof 得到字符数组的长度时请像这样:

char szc[]="abcdef";

wchar_t szw[] = "abcdef";

int sizec = sizeof(szc)/sizeof(char);

int sizew = sizeof(szw)/sizeof(w_char);

 

不用切换的方案:

TCHAR

 

#ifndef _UNICODE

typedef char TCHAR

#define _tcslen strlen

#else

typedef wchar_t TCHAR

#define _tcslen wcslen

#endif

 

这些工作也是做好了的,只等我们用了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值