GB2312/GBK编码规则及单片机汉显字库算法

最近整理旧物时,翻到了5年前的毕业设计,翻翻觉得还有些用,写个博客吧。

在一般的单片机汉显系统中,都会用到GB2312字库,也有少数的需要GBK字库。

“机内码”:英文字符在PC机中以单字节表示,汉子以最高位为1的双字节表示,可以用以下C程序来验证机内码(TC中执行):

main()

{ unsigned char * s,*e="ABcd",*c="你好";

 clrscr();

 printf("English char=");

s=e;

while(*s!=0)

{

printf("%3d,",*s); s++;

}

 printf("/nChinese char=");

s=c;

 while(*s!=0)

{

printf("%3d,",*s);

 s++;

}

getch();

} 

GB2312码是国家标准汉子信息交换用编码,根据机内码将汉子分为94个区,对应第一字节的低7位,每个区94个位,对应第二字节的低7位,并且在机内码的基础上减去0x20,即每个汉子的机内码两个字节分别减去0xa0即得到区位码,见下表。

GBK编码向下与GB2312编码兼容,向上支持ISO10646.1国际标准

汉子点阵字库:现在用得最多的点阵字库为16*16(对应Asc为16*8)、32*32(对应Asc为32*16),取点的方式有多种,大致有:

顺序行列式

逆序行列式

顺序列行式

逆序列行式

顺序逐行式

逆序逐行式

顺序逐列式

逆序逐列式
比较常用的是顺序行列式(UCDOS中采用的模式)

字摸入口计算公式:

GB2312:

CharPos := (高8bit - 0xA1)*94 + (低8bit - 0xA1)) :* 32
GBK:
CharPos := ((高8bit - 0x81)*191 + (低8bit - 0x40)) * 32

ASC:
(ASCII码 - 0x20) * 16; 8x16点阵的(如果是全ASC点阵不要减0x20)

 

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A1A0       、 。 · ˉ ˇ ¨ 〃 々 — ~ ‖ … ‘ ’
A1B0  “ ” 〔 〕 〈 〉 《 》 「 」 『 』 〖 〗 【 】
A1C0  ± × ÷ ∶ ∧ ∨ ∑ ∏ ∪ ∩ ∈ ∷ √ ⊥ ∥ ∠
A1D0  ⌒ ⊙ ∫ ∮ ≡ ≌ ≈ ∽ ∝ ≠ ≮ ≯ ≤ ≥ ∞ ∵
A1E0  ∴ ♂ ♀ ° ′ ″ ℃ $ ¤ ¢ £ ‰ § № ☆ ★
A1F0  ○ ● ◎ ◇ ◆ □ ■ △ ▲ ※ → ← ↑ ↓ 〓  

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A2A0     ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ     
A2B0   ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖
A2C0  ⒗ ⒘ ⒙ ⒚ ⒛ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾
A2D0  ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ① ② ③ ④ ⑤ ⑥ ⑦
A2E0  ⑧ ⑨ ⑩   ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ 
A2F0   Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ    

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A3A0     ! " # ¥ % & ' ( ) * + , - . /
A3B0  0 1 2 3 4 5 6 7 8 9 : ; < = > ?
A3C0  @ A B C D E F G H I J K L M N O
A3D0  P Q R S T U V W X Y Z [ \ ] ^ _
A3E0  ` a b c d e f g h i j k l m n o
A3F0  p q r s t u v w x y z { | }  ̄  

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A4A0     ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く
A4B0  ぐ け げ こ ご さ ざ し じ す ず せ ぜ そ ぞ た
A4C0  だ ち ぢ っ つ づ て で と ど な に ぬ ね の は
A4D0  ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み
A4E0  む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ
A4F0  ゐ ゑ を ん             

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A5A0     ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガ キ ギ ク
A5B0  グ ケ ゲ コ ゴ サ ザ シ ジ ス ズ セ ゼ ソ ゾ タ
A5C0  ダ チ ヂ ッ ツ ヅ テ デ ト ド ナ ニ ヌ ネ ノ ハ
A5D0  バ パ ヒ ビ ピ フ ブ プ ヘ ベ ペ ホ ボ ポ マ ミ
A5E0  ム メ モ ャ ヤ ュ ユ ョ ヨ ラ リ ル レ ロ ヮ ワ
A5F0  ヰ ヱ ヲ ン ヴ ヵ ヶ          

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A6A0     Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο
A6B0  Π Ρ Σ Τ Υ Φ Χ Ψ Ω       
A6C0   α β γ δ ε ζ η θ ι κ λ μ ν ξ ο
A6D0  π ρ σ τ υ φ χ ψ ω       
A6E0  ︵ ︶ ︹ ︺ ︿ ﹀ ︽ ︾ ﹁ ﹂ ﹃ ﹄   ︻ ︼
A6F0  ︷ ︸ ︱  ︳ ︴           

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A7A0     А Б В Г Д Е Ё Ж З И Й К Л М Н
A7B0  О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э
A7C0  Ю Я              
A7D0   а б в г д е ё ж з и й к л м н
A7E0  о п р с т у ф х ц ч ш щ ъ ы ь э
A7F0  ю я               

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A8A0     ā á ǎ à ē é ě è ī í ǐ ì ō ó ǒ
A8B0  ò ū ú ǔ ù ǖ ǘ ǚ ǜ ü ê ɑ  ń ň 
A8C0  ɡ     ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ
A8D0  ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ
A8E0  ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ      
A8F0                  

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A9A0        ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋
A9B0  ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛
A9C0  ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫
A9D0  ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻
A9E0  ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋
A9F0                  

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
AAA0                   
AAB0                 
AAC0                 
AAD0                 
AAE0                 
AAF0                  

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
ABA0                   
ABB0                 
ABC0                 
ABD0                 
ABE0                 
ABF0                  

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
ACA0                   
ACB0                 
ACC0                 
ACD0                 
ACE0                 
ACF0                  

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
ADA0                   
ADB0                 
ADC0                 
ADD0                 
ADE0                 
ADF0                  

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
AEA0                   
AEB0                 
AEC0                 
AED0                 
AEE0                 
AEF0                  

code  +0 +1 +2 +3 +4 +5

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值