程序如何区分该显示中文字符或英语字符?

120 篇文章 6 订阅


先看图片:

图片:


VC里字符编码是用MBCS(Multi-Byte Chactacter System),char类型实际上就是一个8bit的空间(与int类型相同,故有时候类型通用),中文字符“个”在VC里占用2个char的空间,即2字节,s1指向的内存上的数据为(10111000,11110110),如果用十进制表示即为(184,246),十六进制即为(0xB8,0xF6)。

对于MBCS,一个字符占用的空间不是固定长度,如果是ASCII码则是8bit,GBK汉字则是16bit。

ASCII码的范围用十进制表示是 [0,127],单字节字符,用来表示英文字符及数字和其他一些符号。

GBK汉字是双字节字符,前8bit范围是[129,254],后8bit范围是 [64,254]。

可以看到中西字符编码是互不交叉的,printf的东西全送进屏幕缓冲区里,程序读取屏幕缓冲区上的“个”的前8bit,也就是184(0xB8),发现其不在单字符码表里(ASCII),就知道这个不是个单字节字符, 所以指针下移,向后再读8bit,读到 246(0xF6),此时两个字节一共16bit,拿去和GBK汉字码表对照,查有此字,就显示出来。

判断是汉字还是字母的方法,当然就是根据该字节对应数值所处范围来判断是单字节字符(字母/数字/其他半角/通信符号),还是双字节字符(如中日韩文字)。

我简单写个程序方便大家理解:

#include <stdio.h>
int main(){
               char char1 = 184;
               char char2 = 246;

               printf("Print1:\n");

               printf("%c",char1);

               printf("\n");

               printf("%c", char2);


               printf("\n Print2:\n %c%c\n",char1, char2);

               printf(" Print3:\n ");

               printf("%c",char1);
               printf("%c",char2);

              return 0;
}

让我们来看一下结果:         



所以我们还可以这样玩:

#include <stdio.h>
#include <unistd.h>//VC退散

int main(){
          char hexchar[19] = {0xc1,0xd6,0xb2,0xd3,0xb1,0xf3,0x2c,0x20,0x49,0x20,0x4c,0x6f,,0x76,0x65,0x20,0x59,0x6f,0x75,0x21},i;
          for(i=0;i<19;i++){
        printf("%c",hexchar[i]);
        _sleep(300);
    }
    return 0;
}

MBCS根据码表来看可以说是 中英文无歧义的,因此可以区分该显示中文还是英文。






            





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值