最近偶然有人問到這個相關字符編碼的問題,所以百度了下參考了這兩個資料,進行了簡單分析。
**********************************************************************
參考資料一:http://zhidao.baidu.com/link?url=YDoT2OLdKEElDQ86Ce_wEtKt9Nrn2yJ8TIb9JkasvaLvi8D66RRwSvxn2DkFRVM_OOnq4fCoJPA-19AmpPeypa
?“206 210 176 174 214 236 187 219 ” 是 ASCLL碼 , 編輯成中文是什麼 ???
提問者采納:
非常無語啊。。。我們是很有敬業精神的。。意為"我愛朱慧"
********************************************************
現在開始分析:
資料一說:
“206 210 176 174 214 236 187 219 ” 是 ASCLL碼 , 編輯成中文是“我愛朱慧”。
寫成代碼:
#include<stdio.h> int main(void) { printf("%c%c%c%c%c%c%c%c",206,210,176,174,214,236,187,219); printf("\n"); return 0; }
運行結果:
看到這裡,好像明白了。
漢字是雙字節,且兩個數字可以 編碼一個漢字。
總結下就是:
206+210=我
176+174=愛
214+236=朱
187+219=慧
呵呵,到這裡就沒必要再深究啦。
可是,突發奇想,想找到用哪兩個數字可以組合出“你”字?
想搞出“我愛你”編碼!嘿嘿。
於是,我進行了大量測試。沒辦法,不是很懂這個,只好用循環來做啦。
編寫代碼如下。
測試發現129到247有編碼漢字,其余范圍無法編碼成漢字。
測試代碼一:
#include<stdio.h>
int main(void)
{
int i;
for(i=129;i<=247;i++)
printf("%d+%d=%c%c\t",i,i,i,i);
printf("\n");
return 0;
}
運行結果:
測試代碼二:
#include<stdio.h> int main(void) { int i; for(i=129;i<=247;i++) printf("%d+%d=%c%c\t",i,i+1,i,i+1); printf("\n"); return 0; }
運行結果:
測試代碼三:
#include<stdio.h> int main(void) { int i; for(i=129;i<=247;i++) printf("%d+%d=%c%c\t",i,i+2,i,i+2); printf("\n"); return 0; }
......
以此類推,測試了幾組代碼後總結如下:
206+210=我
找了半天都沒找到“你”,汗,真的累了。
又百度,看看有沒有好的其他便捷的方法。
搜索了半天,終於找到了資料二。
*****************************************************************************
參考資料二:http://zhidao.baidu.com/link?url=TyO1WecgunJH_ZOeeSqX1o8O8QPxga2B7JsMrQRzWajNs7O8Nh-g-Yr3B-zzAV1vO_vDqcn6qNDVqj8DwHDH2q
題目:
C語言中兩位ASCLL碼可以表示漢字(如202,214表示手)請問兩位ASCLL怎麼與GB2312中的區位碼相對應
“啊”是國標碼中的第一個是1601,用ASCLL碼怎麼表示它
答案:
#include<stdio.h>int main(void) {
char s[]="啊";//漢字在C/C++中是用2個字節表示的,而對應的ASCII碼則是兩個負數。 char m[3]; printf("%d %d\n",s[0],s[1]); /*注釋 s[0]=-80,s[1]=-95 注釋*/ m[0]=-80; m[1]=-95; m[2]=0; puts(m);//兩個字節連起來湊成一個漢字。 }
運行結果:
*********************************************************************************************************
於是,我模仿資料二,找出漢字”你“的編碼。
編寫下列代碼:
#include<stdio.h> int main(void) { char s[]="你";//漢字在C/C++中是用2個字節表示的,而對應的ASCII碼則是兩個負數。 char m[3]; printf("%d %d\n",s[0],s[1]); m[0]=-60; m[1]=-29; m[2]=0; puts(m);//兩個字節連起來湊成一個漢字。 return 0; }
運行結果:
再修改代碼:
#include<stdio.h> int main(void) { char s[]="你";//漢字在C/C++中是用2個字節表示的,而對應的ASCII碼則是兩個負數。 char m[3]; printf("%c%c\n",s[0],s[1]); m[0]=-60; m[1]=-29; m[2]=0; puts(m);//兩個字節連起來湊成一個漢字。 return 0; }
運行結果:
好了,大功告成了!哈哈,終於搞出來了。
最終完善代碼:
#include<stdio.h> int main() { int i; printf("%c%c%c%c%c%c\n",206,210,176,174,-60,-29); return 0; }
運行結果:
哈哈,好了,打完收工。准備睡覺。