久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

自制漢字取模軟件,學(xué)嵌入式的要看

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年01月18日   【字體:

 

自制漢字取模軟件,學(xué)嵌入式的要看(王挺帥)建議無(wú)協(xié)成員看
漢字點(diǎn)陣取模  16*16點(diǎn)陣  轉(zhuǎn)載請(qǐng)注明出處
學(xué)嵌入式開(kāi)發(fā)這么長(zhǎng)時(shí)間來(lái)一直都在使用別人的取模軟件,很希望有自己的取模軟件。
今天晚上讀了一下漢字編碼和點(diǎn)陣的文章做程序如下。希望對(duì)無(wú)協(xié)嵌入式開(kāi)發(fā)有幫助
         在計(jì)算機(jī)中英文一般使用 ASCII 碼來(lái)表示,而漢字編碼使用的是擴(kuò)展 ASCII 碼,用兩個(gè)ASCII碼來(lái)表示一個(gè)漢字。一個(gè)ASCII碼占用一個(gè)字節(jié),所有在存儲(chǔ)時(shí)英文是占用一個(gè)字節(jié),而漢字占用兩個(gè)字節(jié)。
     擴(kuò)展 ASCII 碼:也就是 ASCII 碼的最高位是1的 ASCII 碼,一個(gè)漢字由兩個(gè)擴(kuò)展 ASCII 碼組成,第一個(gè)擴(kuò)展 ASCII 碼用來(lái)存放區(qū)碼,第二個(gè)擴(kuò)展 ASCII 碼用來(lái)存放位碼。
     區(qū)位碼:在 GB2312-80 標(biāo)準(zhǔn)中,將所有的漢字分為94個(gè)區(qū),每個(gè)區(qū)有94個(gè)位可以存放94個(gè)漢字,形成了人們常說(shuō)的區(qū)位碼,這樣總共就有 94*94=8836 個(gè)漢字。
     點(diǎn)陣字庫(kù):漢字點(diǎn)陣數(shù)據(jù)就是按照這個(gè)區(qū)位的順序來(lái)存放的,也就是最先存放的是第一個(gè)區(qū)的漢字點(diǎn)陣數(shù)據(jù),在每一個(gè)區(qū)中有是按照位的順序
來(lái)存放的。
漢字機(jī)內(nèi)碼、國(guó)標(biāo)碼和區(qū)位碼三者之間的關(guān)系為:區(qū)位碼(十進(jìn)制)的兩個(gè)字節(jié)分別轉(zhuǎn)換為十六進(jìn)制后加20H得到對(duì)應(yīng)的國(guó)標(biāo)碼;機(jī)內(nèi)碼是漢字交換碼(國(guó)標(biāo)碼)兩個(gè)字節(jié)的最高位分別加1,即漢字交換碼(國(guó)標(biāo)碼)的兩個(gè)字節(jié)分別加80H得到對(duì)應(yīng)的機(jī)內(nèi)碼;區(qū)位碼(十進(jìn)制)的兩個(gè)字節(jié)分別轉(zhuǎn)換為十六進(jìn)制后加A0H得到對(duì)應(yīng)的機(jī)內(nèi)碼
國(guó)標(biāo)碼 由兩個(gè)擴(kuò)展ascii碼組成
漢字區(qū)位碼的存放實(shí)在擴(kuò)展 ASCII 基礎(chǔ)上存放的,并且將區(qū)碼和位碼都加上了32,然后存放在兩個(gè)擴(kuò)展 ASCII 碼中。具體的說(shuō)就是:
漢字的   
    第一個(gè)擴(kuò)展ASCII碼 = 128+32 + 漢字區(qū)碼
    第二個(gè)擴(kuò)展ASCII嗎 = 128+32 + 漢字位碼
 
程序要用的字庫(kù)HZK16

程序如下
#include "stdio.h"
#include<iostream>
using namespace std;

void getCode(unsigned char str[],unsigned char data[]);

void  main()
{

 unsigned char str[] = {"王挺帥"};
 unsigned char data[32];
 for(int m = 0;m <1;m++){
  getCode(str+m*2,data);
  
  for (int j=0 ;j<32;j+=2)
  {
   // char 轉(zhuǎn)換成二進(jìn)制輸出
   for(int t = 7;t>=0;t--)
   {
    if((data[j]>>t)&1)
     printf("%d ",(data[j]>>t)&1);
    else
     printf("  ",(data[j]>>t)&1);
   }
   
   for(int t = 7;t>=0;t--)
   {
    if((data[j+1]>>t)&1)
     printf("%d ",(data[j+1]>>t)&1);
    else
     printf("  ",(data[j+1]>>t)&1);
   }
   cout<<endl;
  }
 }
 getchar();
}

//返回點(diǎn)陣數(shù)組
 void getCode(unsigned char str[],unsigned char data[]){
 
  char font_file_name[]   = "HZK16"; // 點(diǎn)陣字庫(kù)文件名
 int font_width       = 16;  // 單字寬度
 int font_height      = 16;  // 單字高度
 int start_offset     = 0; // 偏移
 long offset;

 FILE *fp;
 fp = fopen(font_file_name, "rb");
 int offset_size = font_width * font_height / 8;
 int string_size = font_width * font_height;
 int i=0;
 if (str[i] > 160)
 {
  // 先求區(qū)位碼,然后再計(jì)算其在區(qū)位碼二維表中的位置,進(jìn)而得出此字符在文件中的偏移
  offset = ((str[i] - 0xa1) * 94 + str[i+1] - 0xa1) * offset_size;
  i++;
 }
 else
 {
  offset = (str[i] + 156 - 1) * offset_size;       
 }
 // 讀取其點(diǎn)陣數(shù)據(jù)
 fseek(fp, start_offset + offset, SEEK_SET);
 fread(data,sizeof(char), offset_size,fp);
 fclose(fp);
 }
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 中文字幕在线免费播放 | 亚洲视频不卡 | 五月婷婷六月激情 | 国产成人在线播放 | 欧美网站在线观看 | 久视频在线 | 亚洲一级二级 | 成人在线免费网站 | 激情综合婷婷 | 五月婷婷色综合 | 一级做a视频 | 性做久久久久久久免费看 | 欧美片网站免费 | 日本在线网站 | 国产毛片毛片毛片 | 老司机午夜视频 | 久久久午夜 | 亚洲成人动漫在线观看 | 综合色av | 天天操一操 | 欧美成人一级片 | 成人扒开伸进免费观看 | 日韩视频免费 | 亚洲欧美视频在线 | 曰韩一级片 | 免费黄色大片 | 乳大翘臀1v1h糙汉 | 欧美日韩激情 | 久久日av | 色人人| 色综合五月天 | 伊人久久网站 | 成人国产精品视频 | 美女一级片 | 懂色av一区二区夜夜嗨 | 一区二区三区在线播放 | 国产日韩精品在线 | 欧美激情国产精品 | 久热精品在线 | 狠狠操综合 | 久草精品视频 |