全角和半角相互轉換(C語言實現)


目前,我們接觸的漢字編碼主要包括GBK和GB2312。其中,GB2312又稱國標碼,它是一個簡化字的編碼規范,也包括其他的符號、字母、日文假名等,共7445個圖形字符,其中漢字占6763個。我們平時說6768個漢字,實際上里邊有5個編碼為空白,所以總共有6763個漢字。GB2312規定“對任意一個圖形字符都采用兩個字節表示,每個字節均采用七位編碼表示”,習慣上稱第一個字節為“高字節”,第二個字節為“低字節”。GB2312中漢字的編碼范圍為,第一字節0xB0-0xF7(對應十進制為176-247),第二個字節0xA0-0xFE(對應十進制為160-254)。而GBK是GB2312的擴展,是向上兼容的,GB2312中的漢字的編碼與GBK中漢字的相同,只不過GBK中還包含繁體字的編碼。GBK中每個漢字仍然占用兩個字節,第一個字節的范圍是0x81-0xFE(即129-254),第二個字節的范圍是0x40-0xFE(即64-254)。GBK中有碼位23940個,包含漢字21003個。因此,下面的代碼也是在使用GB2312或GBK編碼的環境下測試通過。

 1 //全角轉半角
 2 void sbc_to_dbc(char *sbc, char *dbc)
 3 {
 4     for(; *sbc; ++sbc)
 5     {
 6         if((*sbc & 0xff) == 0xA1 && (*(sbc + 1) & 0xff) == 0xA1)        //全角空格
 7         {
 8             *dbc++ = 0x20;
 9             ++sbc;
10         }
11         else if((*sbc & 0xff) == 0xA3 && (*(sbc + 1) & 0xff) >= 0xA1 && (*(sbc + 1) & 0xff) <= 0xFE)    //ASCII碼中其它可顯示字符
12             *dbc++ = *++sbc - 0x80;
13         else
14         {
15             if(*sbc < 0)    //如果是中文字符,則拷貝兩個字節
16                 *dbc++ = *sbc++;
17             *dbc++ = *sbc;
18         }
19     }
20     *dbc = 0;
21 }
22 
23 //半角轉全角
24 void dbc_to_sbc(char *dbc, char *sbc)
25 {
26     for(; *dbc; ++dbc)
27     {
28         if((*dbc & 0xff) == 0x20)    //半角空格
29         {
30             *sbc++ = 0xA1;
31             *sbc++ = 0xA1;
32         }
33         else if((*dbc & 0xff) >= 0x21 && (*dbc & 0xff) <= 0x7E)
34         {
35             *sbc++ = 0xA3;
36             *sbc++ = *dbc + 0x80;
37         }
38         else
39         {
40             if(*dbc < 0)    //如果是中文字符,則拷貝兩個字節
41                 *sbc++ = *dbc++;
42             *sbc++ = *dbc;
43         }
44     }
45     *sbc = 0;
46 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM