Windows编程一之字符集编码

字符集来源:

1985年,微软发布的windows 1.0中,自带一种字符编码,称为ANSI字符集,因为它是基于ANSI和ISO标准,但是ANSI只是由8位编码来表示,因为英文只有26个英文字母以及一些标点符号等,最多可以表示2^8=256个字符,当涉及到国际化的时候,这256个字符,明显是不能用来表示所有语言了,这就出现了Unicode编码——一个字符由16位来表示。

各种编码联系与区别:

ASCII:American Standard Code for Information Interchange,美国信息互换标准代码 一共8位, 7位有效位加一位奇偶校验位。主要针对拉丁文。包含26*2个英文字母,0~9的表示以及一些特殊符号的表示,在10进制的表示下,数字0为48,大写字母A为65,小写字母a为97.

ANSI:AMERICAN NATIONAL STANDARDS INSTITUTE,美国国家标准学会,美国国家标准协会,是作为ASCII的扩展,可以这么认为,ANSI的前128个字符和ASCII一样,但是ANSI取消了奇偶校验位,将最后一位也用来做有效位,ANSI只是一种标准。比如中文的ANSI标准为GB2312。日文好像是JP.



在不同的操作系统中,对于字符集的要求也是不一样的有的操作系统只支持多字节字符集,有的操作系统只支持宽字节字符集。但是大多数操作系统两种字符集都能支持。

一般来说,在多字节字符集中,一个ASCII字符只占一个字节,而中文,日文等象形文字,一个字符占用两个字节。

比如:char str[]="adc测试";

那么strlen(str)=7  sizeof(str)=8.


在宽字节字符集中,每个字符都占两个字节。ascii前面补充0x00。每次查找都是每来个字节查找(结束符\0 00 00)

wcstrlen("abc测试")=10;   sizeof(abc测试")=12;

那么,在Winodows编程的时候,怎么能够兼容不同的操作系统呢,比如同样一段代码,在不修改的前提下,怎么使得在只支持单字节字符和只支持宽字节字符的时候,都能使用呢?

在C++ tchar.h头文件中,有一段宏:

大概是这样的

 

<pre name="code" class="html">#ifdef _UNICODE
 #define _tcslen wcslen
 #define TCHAR wchar_t
 #define LPSTR wchar_t
 #define _T(x)L##x
#else
 #define _tcslen strlen
 #define THCAR char
 #define LPTSTR char*
 #define _T(x) x
#endif


 

 
 


 


 

转载于:https://www.cnblogs.com/citron/p/6135602.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值