最近偶然有人問到這個相關字符編碼的問題,因此百度了下參考了這兩個資料,進行了簡單分析。html
**********************************************************************工具
?「206 210 176 174 214 236 187 219 」 是 ASCII碼 , 編輯成中文是什麼 ???編碼
提問者採納:
很是無語啊。。。咱們是頗有敬業精神的。。意爲"我愛朱慧"
********************************************************url
如今開始分析:spa
資料一說:.net
「206 210 176 174 214 236 187 219 」 是 ASCII碼 , 編輯成中文是「我愛朱慧」。code
寫成代碼:orm
#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;
}
運行結果:htm
看到這裏,好像明白了。
漢字是雙字節,且兩個數字能夠 編碼一個漢字。
總結下就是:
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=我 176+174=愛 184+184=父 208+208=行 193+193=亮 183+183=販 198+198=破 131+131=傻 188+188=技 177+177=北 180+180=創 181+181=檔 182+182=抖 185+185=構 186+186=漢 187+187=換 191+191=靠 196+196=哪 195+195=妹 202+202=適 197+197=排 200+200=熱 214+214=種 199+199=喬 213+213=照 199+199=喬 |
204+204=燙 192+192=覽 180+181=吹 181+182=刀 176+177=氨 204+205=掏 206+207=蝸 192+193=懶 187+188=患 182+183=鬥 185+186=購 190+191=究 191+192=坷 197+198=牌 180+181=吹 183+184=犯 193+194=諒 194+195=旅 198+199=魄 199+200=僑 203+204=頌 206+207=蝸 207+208=閒 208+209=醒 209+210=巖 176+178=安 |
177+179=背 178+180=泊 179+181=車 180+182=炊 183+185=飯 184+186=負 185+187=夠 186+188=杭 187+189=喚 188+190=季 190+192=糾 195+197=門 198+200=迫 199+201=巧 200+202=仁 201+203=傷 203+205=送 204+206=濤 205+207=拖 208+210=幸 210+212=以 211+213=誘 212+214=災 213+215=兆 214+216=重 215+217=蹤 |
176+179=俺 177+180=貝 178+181=駁 181+184=蹈 182+185=豆 183+186=泛 184+187=富 185+188=辜 186+189=航 193+196=聊 194+197=屢 195+198=悶 196+199=那 200+203=人 201+204=商 202+205=釋 203+206=宋 209+212=言 210+213=藝 211+214=又 212+215=宰 217+220=餘 176+180=按 178+182=捕 179+183=撤 181+185=倒 |
182+186=逗 188+192=祭 195+199=們 197+201=派 200+204=忍 201+205=賞 202+206=飾 212+216=載 213+217=召 214+218=衆 177+182=倍 181+186=島 183+188=芳 214+219=舟 215+220=總 212+217=再 210+215=易 208+213=姓 207+212=顯 190+185=久 176+182=岸 180+186=春 182+188=都 183+189=方 200+206=任 201+207=上 |
找了半天都沒找到「你」,汗,真的累了。
又百度,看看有沒有好的其餘便捷的方法。
搜索了半天,終於找到了資料二。
*****************************************************************************
題目:
C語言中兩位ASCII碼能夠表示漢字(如202,214表示手)請問兩位ASCII怎麼與GB2312中的區位碼相對應
「啊」是國標碼中的第一個是1601,用ASCII碼怎麼表示它
答案:
#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;
}
感謝zhykin前輩提供的第二種方法:
#include<stdio.h> int main() { int i; printf("%c%c%c%c%c%c\n",206,210,176,174,196,227); return 0; }
運行結果:
今天上博客,發現犯了低級錯誤,很抱歉,手誤,把I寫成了L。
還有很感謝各位前輩的指點和教誨,在下定當虛心努力改進。
感謝zhykin前輩的指教,一語驚醒夢中人,使我對這個編碼瞭解的更深了。
這裏引用「zhykin」前輩的話總結下:
都是字符256餘數的關係,「我」能夠表示成206,210,也能夠表示成-50,-46;同理「你」也能夠是196,227。
「我」能夠用206,210表示也能夠用-50,-46表示。
「你」能夠用196,227表示也能夠用-60,-29表示.
再次對zhykin前輩表示衷心的感謝!
汗,剛一好友提醒了下,再次發現問題,原來以上都是個人誤解,對此表示抱歉。
這原來是GBK編碼。
好比:「命」的GBK編碼爲:0xC3,0xFC
證實代碼:
#include<stdio.h> int main() { int i; printf("%c%c\n",0xC3,0xFC); return 0; }
運行結果以下:
在下學藝不精,對此誤導了你們,形成錯誤影響深感抱歉!
在此公開表示道歉!
最後奉上一個軟件小工具,能夠定製你的專屬表白代碼