用C 程式理解漢字的機內碼錶示
阿新 • • 發佈:2018-11-07
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
漢字的編碼是很多初學者不容易搞不明白的事情。最早的漢字字符集是GB2312-80,收入漢字6763個,符號715個,總計7478個字元,大陸普遍使用的簡體字字符集。本文藉助於一個能輸出這些字元的簡單的C++程式,體驗漢字字元的編碼。
先簡介一下GB2312-80的概況。
1、區位碼
每個漢字及符號都有一個區位碼,即每個漢字有一個區號(兩位十進位制)和一個位號(兩位十進位制)。一共分了94個區,每個區中有94個漢字。
如下圖了其中第1區和17區中的漢字:
2、國標碼
漢字的國標碼可以在區位碼基礎上換算得到:國標碼=(區位碼的十六進位制表示)+2020H,國標碼的取值範圍:2121H~7E7EH。
例如:“啊”的區碼是16,位碼為01,其區位碼的十六進位制表示為1001H,得到“啊”的國標碼為:3021H。如下圖:
3、機內碼
中文或西文資訊在計算機系統中的程式碼表示稱為機內碼。ASCII碼是一種西文機內碼,用一個位元組表示,其最高位均為0。漢字機內碼用連續兩個位元組表示,為能和ACSII符號區分,每個位元組的最高位是1。機內碼和國標碼的轉換規則是:機內碼 = 國標碼+8080H =(區位碼的十六進位制表示)+A0A0H。顯然,就是將國標碼的兩個位元組的最高位均置為1即可。
例如,“啊”的國標碼為:3021H,加上8080H後,其機內碼為B0A1H,如下圖所示:
下面的程式,將GB2312-80中所有的漢字輸出到一個檔案中,對照上面的原理,讀程式並執行,你將理解漢字在機器內部的表示。
(1)C++程式
#include <iostream>#include <cstdio>using namespace std; int main(){ int i,j; char a[3]; //用兩位元組表示一個漢字,a[0]為第1個位元組,a[1]為第2個位元組 a[2]='\0'; //a[2]固定為'\0',作為儲存一個漢字的字串的結束 freopen("chineseChar.txt","w",stdout); //將輸出重定向到檔案,便於檢視結果 for(i=1;i<=94;i++) //區號從1到94 { cout<<"=====第 "<<i<<" 區======"<<endl; a[0] = i + 0xA0; //將第1個位元組變為機內碼 for(j=1;j<=94;j++) //位號從1到94 { a[1] = j + 0xA0; //將第2個位元組變為機內碼 cout<<a<<'\t'; //輸出a,裡面有兩位元組,是i區j位漢字的機內碼 if(j%10==0) cout<<endl; //每10個換一行 } cout<<endl; } return 0;}
(2)C程式
#include<stdio.h>int main(){ int i,j; char a[3]; //用兩位元組表示一個漢字,a[0]為第1個位元組,a[1]為第2個位元組 a[2]='\0'; //a[2]固定為'\0',作為儲存一個漢字的字串的結束 freopen("chineseChar.txt","w",stdout); //將輸出重定向到檔案,便於檢視結果 for(i=1;i<=94;i++) //區號從1到94 { printf("=====第 %d 區======\n",i); a[0] = i + 0xA0; //將第1個位元組變為機內碼 for(j=1;j<=94;j++) //位號從1到94 { a[1] = j + 0xA0; //將第2個位元組變為機內碼 printf("%s\r",a); //輸出a,裡面有兩位元組,是i區j位漢字的機內碼 if(j%10==0) printf("\n"); //每10個換一行 } printf("\n"); } return 0;}
程式輸出的所有漢字,見本文後附件。
#include <iostream>using namespace std;int main(){ char a[]="漢字處理挺好玩"; cout<<a<<endl; a[1]='a'; cout<<a<<endl; a[2]='b'; cout<<a<<endl; char b[10]; b[8]='\0'; cout<<b<<endl; return 0;}
==================== 迂者 賀利堅 CSDN部落格專欄=================|== IT學子成長指導專欄 專欄文章的分類目錄(不定期更新) ==||== C++ 課堂線上專欄 賀利堅課程教學連結(分課程年級) ==||== 我寫的書——《逆襲大學——傳給IT學子的正能量》 ==|===== 為IT菜鳥起飛鋪跑道,和學生一起享受快樂和激情的大學 ===== |
附件:程式輸出的所有GB2312-80漢字和字元 =====第 1 區======
、 。 · ˉ ˇ ¨ 〃 々 —
~ ‖ … ‘ ’ “ ” 〔 〕 〈
〉 《 》 「 」 『 』 〖 〗 【
】 ± × ÷ ∶ ∧ ∨ ∑ ∏ ∪
∩ ∈ ∷ √ ⊥ ∥ ∠ ⌒ ⊙ ∫
∮ ≡ ≌ ≈ ∽ ∝ ≠ ≮ ≯ ≤
≥ ∞ ∵ ∴ ♂ ♀ ° ′ ″ ℃
$ ¤ ¢ £ ‰ § № ☆ ★ ○
● ◎ ◇ ◆ □ ■ △ ▲ ※ →
← ↑ ↓ 〓
=====第 2 區======
ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ
⒈ ⒉ ⒊ ⒋
⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕
⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⑴ ⑵ ⑶ ⑷
⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁
⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ① ② ③ ④
⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ㈠ ㈡
㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩
Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ
Ⅺ Ⅻ
=====第 3 區======
! " # ¥ % & ' ( ) *
+ , - . / 0 1 2 3 4
5 6 7 8 9 : ; < = >
? @ A B C D E F G H
I J K L M N O P Q R
S T U V W X Y Z [ \
] ^ _ ` a b c d e f
g h i j k l m n o p
q r s t u v w x y z
{ | }  ̄
=====第 4 區======
ぁ あ ぃ い ぅ う ぇ え ぉ お
か が き ぎ く ぐ け げ こ ご
さ ざ し じ す ず せ ぜ そ ぞ
た だ ち ぢ っ つ づ て で と
ど な に ぬ ね の は ば ぱ ひ
び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ
ぽ ま み む め も ゃ や ゅ ゆ
ょ よ ら り る れ ろ ゎ わ ゐ
ゑ を ん
=====第 5 區======
ァ ア ィ イ ゥ ウ ェ エ ォ オ
カ ガ キ ギ ク グ ケ ゲ コ ゴ
サ ザ シ ジ ス ズ セ ゼ ソ ゾ
タ ダ チ ヂ ッ ツ ヅ テ デ ト
ド ナ ニ ヌ ネ ノ ハ バ パ ヒ
ビ ピ フ ブ プ ヘ ベ ペ ホ ボ
ポ マ ミ ム メ モ ャ ヤ ュ ユ
ョ ヨ ラ リ ル レ ロ ヮ ワ ヰ
ヱ ヲ ン ヴ ヵ ヶ
=====第 6 區======
Α Β Γ Δ Ε Ζ Η Θ Ι Κ
Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ
Φ Χ Ψ Ω
α β γ δ ε ζ η θ
ι κ λ μ ν ξ ο π ρ σ
τ υ φ χ ψ ω
︵ ︶ ︹ ︺ ︿ ﹀ ︽
︾ ﹁ ﹂ ﹃ ﹄ ︻ ︼ ︷
︸ ︱ ︳ ︴
=====第 7 區======
А Б В Г Д Е Ё Ж З И
Й К Л М Н О П Р С Т
У Ф Х Ц Ч Ш Щ Ъ Ы Ь
Э Ю Я
а б
в г д е ё ж з и й к
л м н о п р с т у ф
х ц ч ш щ ъ ы ь э ю
я
=====第 8 區======
ā á ǎ à ē é ě è ī í
ǐ ì ō ó ǒ ò ū ú ǔ ù
ǖ ǘ ǚ ǜ ü ê ɑ ń ň
ɡ ㄅ ㄆ ㄇ ㄈ
ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ
ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ
ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ
ㄧ ㄨ ㄩ
=====第 9 區======
─ ━ │ ┃ ┄ ┅ ┆
┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐
┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚
┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤
┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮
┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸
┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂
╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋
=====第 10 區======
=====第 11 區======
=====第 12 區======
=====第 13 區======
=====第 14 區======
=====第 15 區======
=====第 16 區======
啊 阿 埃 挨 哎 唉 哀 皚 癌 藹
矮 艾 礙 愛 隘 鞍 氨 安 俺 按
暗 岸 胺 案 骯 昂 盎 凹 敖 熬
翱 襖 傲 奧 懊 澳 芭 捌 扒 叭
吧 笆 八 疤 巴 拔 跋 靶 把 耙
壩 霸 罷 爸 白 柏 百 擺 佰 敗
拜 稗 斑 班 搬 扳 般 頒 板 版
扮 拌 伴 瓣 半 辦 絆 邦 幫 梆
榜 膀 綁 棒 磅 蚌 鎊 傍 謗 苞
胞 包 褒 剝
=====第 17 區======
薄 雹 保 堡 飽 寶 抱 報 暴 豹
鮑 爆 杯 碑 悲 卑 北 輩 背 貝
鋇 倍 狽 備 憊 焙 被 奔 苯 本
笨 崩 繃 甭 泵 蹦 迸 逼 鼻 比
鄙 筆 彼 碧 蓖 蔽 畢 斃 毖 幣
庇 痺 閉 敝 弊 必 闢 壁 臂 避
陛 鞭 邊 編 貶 扁 便 變 卞 辨
辯 辮 遍 標 彪 膘 表 鱉 憋 別
癟 彬 斌 瀕 濱 賓 擯 兵 冰 柄
丙 秉 餅 炳
=====第 18 區======
病 並 玻 菠 播 撥 鉢 波 博 勃
搏 鉑 箔 伯 帛 舶 脖 膊 渤 泊
駁 捕 卜 哺 補 埠 不 布 步 簿
部 怖 擦 猜 裁 材 才 財 睬 踩
採 彩 菜 蔡 餐 參 蠶 殘 慚 慘
燦 蒼 艙 倉 滄 藏 操 糙 槽 曹
草 廁 策 側 冊 測 層 蹭 插 叉
茬 茶 查 碴 搽 察 岔 差 詫 拆
柴 豺 攙 摻 蟬 饞 讒 纏 鏟 產
闡 顫 昌 猖
=====第 19 區======
場 嘗 常 長 償 腸 廠 敞 暢 唱
倡 超 抄 鈔 朝 嘲 潮 巢 吵 炒
車 扯 撤 掣 徹 澈 郴 臣 辰 塵
晨 忱 沉 陳 趁 襯 撐 稱 城 橙
成 呈 乘 程 懲 澄 誠 承 逞 騁
秤 吃 痴 持 匙 池 遲 弛 馳 恥
齒 侈 尺 赤 翅 斥 熾 充 衝 蟲
崇 寵 抽 酬 疇 躊 稠 愁 籌 仇
綢 瞅 醜 臭 初 出 櫥 廚 躇 鋤
雛 滁 除 楚
=====第 20 區======
礎 儲 矗 搐 觸 處 揣 川 穿 椽
傳 船 喘 串 瘡 窗 幢 床 闖 創
吹 炊 捶 錘 垂 春 椿 醇 脣 淳
純 蠢 戳 綽 疵 茨 磁 雌 辭 慈
瓷 詞 此 刺 賜 次 聰 蔥 囪 匆
從 叢 湊 粗 醋 簇 促 躥 篡 竄
摧 崔 催 脆 瘁 粹 淬 翠 村 存
寸 磋 撮 搓 措 挫 錯 搭 達 答
瘩 打 大 呆 歹 傣 戴 帶 殆 代
貸 袋 待 逮
=====第 21 區======
怠 耽 擔 丹 單 鄲 撣 膽 旦 氮
但 憚 淡 誕 彈 蛋 當 擋 黨 蕩
檔 刀 搗 蹈 倒 島 禱 導 到 稻
悼 道 盜 德 得 的 蹬 燈 登 等
瞪 凳 鄧 堤 低 滴 迪 敵 笛 狄
滌 翟 嫡 抵 底 地 蒂 第 帝 弟
遞 締 顛 掂 滇 碘 點 典 靛 墊
電 佃 甸 店 惦