GBK點陣顯示字型檔的製作和使用
GBK編碼共收錄漢字21003個、符號883個,並提供1894個造字碼位,簡、繁體字融於一庫。以兩個位元組表示一個漢字,編碼範圍是0x8140~0xfefe,相容GB2318,並覆蓋了unicode中的所有漢字。Win7記事本預設以GBK儲存漢字。
開發環境
Win7、Eclipse、MinGW
1.生成GBK全字元檔案
執行下面這段程式碼,生成GBK全字元檔案gbk.txt,編碼範圍0x8140~0xfefe。
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp=0; char ch=0; unsigned short int start=0x8140; unsigned char part1=0; unsigned char part2=0; fp=fopen("gbk.txt","wb"); if(fp==NULL) { perror("Cann't open gbk.txt"); return -1; } else printf("Creat file gbk.txt/n"); while(start < 0xfeff) { part1=start>>8; part2=start; fputc(part1,fp); fputc(part2,fp); start++; } fclose(fp); printf("success!"); return 0; }
執行後,用記事本開啟gbk.txt檔案,可以看到其中的字元。
2.生成字模二進位制檔案
用“牧碼字模”軟體開啟gbk.txt檔案,選擇字型為宋體,字重為1,點陣大小16*16,對齊方式為左下,取模方式為“縱向取模、高位在下”。輸出格式選擇bin。然後點選輸出,會生成一個temp.bin檔案,改名為gbk.bin。
gbk.bin檔案就是GBK編碼字元的點陣字型檔檔案,每32個位元組可以繪製一個字元,例如第一個字元‘丂’的顯示如下:
取模的資料為:
0x02, 0x02, 0x02, 0xc2, 0xb2, 0x8e, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x40, 0x3f, 0x00, 0x00, 0x00, 0x00,
3.使用字型檔檔案
gbk.bin檔案中按GBK編碼的大小排列,每32個位元組可以顯示一個字元,假設一個字元的GBK編碼為NUM,那麼它的點陣資料第一個位元組的位置就是:
(NUM-0x8240)*32
從這個位元組開始,讀取32個位元組,將其按按照取模方式顯示即可。
例如:用Linux的終端模擬點陣螢幕,每個字元位置就是一個點,程式如下:
#include <stdio.h> #include <unistd.h> #include <curses.h> #define START 0x8140 #define DATANUM 0x20 int displaychar(FILE *fp,unsigned short int dispch,char fillch,char start_x,char start_y); int main(void) { FILE * fp=0; unsigned short int testch = 0xb0ae; //漢字'愛‘的gbk碼 fp = fopen("gbk.bin","rb"); initscr(); displaychar(fp,testch,'*',0,0); refresh(); while(1); endwin(); fclose(fp); return 0; } /* * fp指向點陣字型檔二進位制檔案 * 以點陣方式顯示一個GBK字元 * dispch是要顯示的字元,fillch是填充點陣的字元 * start_x,start_y是顯示的起始座標 */ int displaychar(FILE *fp,unsigned short int dispch,char fillch,char start_x,char start_y) { char x=start_x; char y=start_y; unsigned int location=(dispch-START)*DATANUM; int i=0; int j=0; char buf=0; fseek(fp,location,SEEK_SET); for(i=0;i<DATANUM;i++) { buf=fgetc(fp); //顯示一個位元組 for(j=0;j<8;j++) { move(y+j,x); if( buf & (0x01<<j) ) { addch(fillch); } } if(x == (start_x+15)) { x=start_x; y=start_y+8; } else x++; } return 0; }
顯示效果如下:
下載:
相關推薦
GBK點陣顯示字型檔的製作和使用
GBK編碼共收錄漢字21003個、符號883個,並提供1894個造字碼位,簡、繁體字融於一庫。以兩個位元組表示一個漢字,編碼範圍是0x8140~0xfefe,相容GB2318,並覆蓋了unicode中的所有漢字。Win7記事本預設以GBK儲存漢字。 開發環境 Win7、Eclipse、MinGW
EasyUI製作隱藏的表格,查詢時顯示錶格和結果
1.HTML頁面很簡單,如圖: 2.接下來設定表格的隱藏與顯示,隱藏語句放到頁面初始化方法裡就行,顯示語句放到查詢方法裡如圖: 例如:頁面初始化方法: 查詢方法(即查詢按鈕的點選事件): &
emwin字型檔製作及漢字顯示
備註:工具是nxp官方釋放出來的,可以到連結下載:http://download.csdn.net/download/armwind/10103643 最近在研究emwin字型顯示部分,但由於無法看到原始碼,也不知道emwin是如何實現的。也算是看葫蘆畫瓢,記錄下字型檔製作過程。
MiniGUI TTF旋轉字型檔製作並豎直顯示文字
一. 製作TTF旋轉字型檔 1.下載fontforge,可以在Ubuntu軟體中心下載 2. 用該軟體開啟字型檔之後,按ctrl+a全選文字 3.點選上面工具欄的基礎–>變換–>如圖設定
LED點陣顯示,有關特殊國別(阿拉伯,希伯來,泰文)字元排版和亂碼問題解決
序:最近公司的需求:做一個模擬LED屏的顯示控制元件中間各種曲折!此文做個記錄,本來早就改寫完的!各種原因前後隔了兩個多月!文章寫的比較詳細,熟悉的大佬可以跳過直接看程式碼!PS:後面有完整的程式碼正文:具體的讀字型檔和點陣顯示就不詳細寫了,可以參考 簡書ForeverCy
用 74hc138 和 74hc595 驅動 8x8 點陣顯示
用STC89C52,74hc138驅動列,74hc595驅動行,8x8點陣顯示問題。想顯示箭頭,......。懸賞分:30 解決時間:2010-12-10 08:58//=============================================最佳答案:題目給出的程式基本結構是正
在SQL2008和2012裏面怎麽讓顯示全部行和編輯 全部而不是200和1000
時間 所有 microsoft man server2 soft 比較 資源管理 sql 在sql server2008裏面,可能微軟考慮到數據量比較大,如果直接返回所有行,可能造成耗費時間過多。所有默認為"編輯前200行"和"返回前1000行".這對於有些朋友來說不太方面
struts2 全局攔截器,顯示請求方法和參數
功能 defaults i18n token override params tin back alias 後臺系統中應該須要一個功能那就是將每一個請求的url地址和請求的參數log出來,方便系統調試和bug追蹤,使用struts2時能夠使用struts2的全局攔截器實
一起talk C栗子吧(第一百二十三回:C語言實例--顯示變量和函數的地址)
調試 ora 部分 example 多線程 ear red 語言 help 各位看官們,大家好,上一回中咱們說的是多線程的樣例。這一回咱們說的樣例是:顯示變量和函數的地址。閑話休提,言歸正轉。讓我們一起talk C栗子吧! 在編敲代碼時,有時候須
編碼格式簡介:ASCII碼、ANSI、GBK、GB2312、GB18030和Unicode、UTF-8,BOM頭
family 用兩個 圖片 and 正是 全球化 asc 即使 little 編碼格式簡介:ASCII碼、ANSI、GBK、GB2312、GB18030和Unicode、UTF-8,BOM頭 二進制: 只有0和1。 十進制、十六進制、八進制: 計算機其實挺笨的,它只
點陣顯示心型
圖案 stat 字符轉換 include har nbsp ddr ati sign 心形圖案 #include<reg52.h> //綁定位 sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; s
使用bootstrap table時不能顯示篩選列和分頁每頁顯示的行數
pts -i str 顯示 data bootstra 同事 bootstrap src 使用bootstrap table時不能顯示篩選列和分頁每頁顯示的行數 後來在同事的幫助下,才發現沒有引用bootstrap的js文件 <script src="/Scr
ListView中動態顯示隱藏HeaderView和FooterView
roi ron mas relative 監聽事件 isp 刪除 listen 具體實現 ListView中動態顯示和隱藏Header&Footer 解決思路: 直接設置HeaderView和FooterView.setVisibility(View.GONE)無效
解決echarts餅圖顯示百分比,和顯示內容字體及大小
fonts mat 好的 pan har tle title log option // 基於準備好的dom,初始化echarts實例 var pieEchart = echarts.init(document.getElementById(‘pi
織夢後臺自定義表單,中文不顯示,數字和字母顯示的解決辦法
數字和字母 如果 PE spa templet lsp 文件 html fields 1.找到 找到dede/templets/diy_list.htm 這個文件。 2.找到htmlspecialchars($fields[$field]); 這個位置,請在工具
vue elementui table 雙擊單元格實現編輯,聚焦,失去焦點,顯示隱藏input和span
ntc 單元 src func cell Dimension === http nts <el-table :data="tableData" class="tb-edit" style="width: 100%"
【領卓教育】Linux--靜態庫與動態庫(共享庫) 區別、製作和使用
1.概念和區別 靜態庫 :(1)libxxx.a ,程式在編譯時,將庫編譯 進可執行程式中! &nbs
WWW實現圖片資源顯示以及儲存和本地載入
WWW實現圖片資源顯示以及儲存和本地載入 using UnityEngine; using System.Collections; using System.IO; using UnityEditor; enum GetPicType { DownLoad = 0, Local
伺服器(Dell T360+2塊Tesla P100)配置顯示卡驅動和cuda最終版(終於配置好了)
前言: 一開始我們實驗室嘗試用deb安裝包的方法安裝NVIDIA Tesla P100對應的顯示卡驅動和CUDA,但是總是出現重複登入的問題,迫不得已我們最後採用比較繁瑣的用run檔案安裝顯示卡驅動和CUDA的方法。(還是建議先用deb檔案安裝一下試試,因為比較簡便。) 首先明確一下,我沒有
分別顯示用float和double指數記數法所能代表的最大和最小數字
java中指數記數法是指用大寫的E來替代10的一種計數方式,如:1.4E-45 就表示 1.4*10^(-45),也就是1.4乘10的-45次方。 指數記數法已經瞭解了,那麼float和double所能代表的最大和最小數怎麼求呢?沒關係,在它們對應的包裝器型別中,已經定義好了對應的屬性: