程序如何区分该显示中文字符或英语字符?
先看圖片:
圖片:
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退散
??????? printf("%c",hexchar[i]);
??????? _sleep(300);
??? }
??? return 0;
}
MBCS根據碼表來看可以說是中英文無歧義的,因此可以區分該顯示中文還是英文。
????????????
總結
以上是生活随笔為你收集整理的程序如何区分该显示中文字符或英语字符?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 64位ie加载java失败_java-无
- 下一篇: java ajax jquery分页插件