最近偶然有人問到這個相關字符編碼的問題,所以百度了下參考了這兩個資料,進行了簡單分析。
**********************************************************************
?“206 210 176 174 214 236 187 219 ” 是 ASCII碼 , 編輯成中文是什么 ???
提問者采納:
非常無語啊。。。我們是很有敬業精神的。。意為"我愛朱慧"
********************************************************
現在開始分析:
資料一說:
“206 210 176 174 214 236 187 219 ” 是 ASCII碼 , 編輯成中文是“我愛朱慧”。
寫成代碼:
#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=我 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漢字編碼表:
參考博文:http://blog.sina.com.cn/s/blog_8184e033010109ug.html
比如:“命”的GBK編碼為:0xC3,0xFC
證明代碼:
#include<stdio.h> int main() { int i; printf("%c%c\n",0xC3,0xFC); return 0; }
運行結果如下:
在下學藝不精,對此誤導了大家,造成錯誤影響深感抱歉!
在此公開表示道歉!
最后奉上一個軟件小工具,可以定制你的專屬表白代碼
下載地址:https://download.csdn.net/download/hadues/11107523