C語言中兩位ASCII碼能夠表示漢字

最近偶然有人問到這個相關字符編碼的問題,因此百度了下參考了這兩個資料,進行了簡單分析。html

 

**********************************************************************工具

參考資料一:http://zhidao.baidu.com/link?url=YDoT2OLdKEElDQ86Ce_wEtKt9Nrn2yJ8TIb9JkasvaLvi8D66RRwSvxn2DkFRVM_OOnq4fCoJPA-19AmpPeypa測試

「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=上

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

找了半天都沒找到「你」,汗,真的累了。

又百度,看看有沒有好的其餘便捷的方法。

搜索了半天,終於找到了資料二。

 *****************************************************************************

參考資料二:http://zhidao.baidu.com/link?url=TyO1WecgunJH_ZOeeSqX1o8O8QPxga2B7JsMrQRzWajNs7O8Nh-g-Yr3B-zzAV1vO_vDqcn6qNDVqj8DwHDH2q

 

題目:

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

相關文章
相關標籤/搜索