漢字點陣c語言,漢字點陣c語言是什麼

本文目錄一覽:

急!C語言編寫 漢字點陣字庫 ‘羅’ ‘恆’這兩個字

#include stdio.h

// 每個漢字的水平點數

const int WIDTH = 24;

// 每個漢字的垂直點數

const int HEIGHT = 24;

/*

// 方案1 :每個漢字的筆畫

const char FRONT_COLOR[]=”■”;

// 方案1 :每個漢字的背景

const char BACKGROUND_COLOR[]=”□”;

*/

// 方案2 :每個漢字的筆畫

const char FRONT_COLOR[]=”*”;

// 方案2 :每個漢字的背景

const char BACKGROUND_COLOR[]=” “;

// 羅恆

int name1[]=

{

/* “羅”字 */

0x00,0x00,0x00,

0x00,0x00,0x00,

0x08,0x00,0x08,

0x0F,0xFF,0xFC,

0x0C,0x61,0x08,

0x0C,0x61,0x08,

0x0C,0x61,0x08,

0x0C,0x61,0x08,

0x0F,0xFF,0xF8,

0x0C,0x10,0x08,

0x00,0x30,0x00,

0x00,0x60,0x20,

0x00,0xDF,0xF0,

0x01,0x80,0x60,

0x03,0x40,0xC0,

0x06,0x60,0x80,

0x08,0x31,0x80,

0x10,0x23,0x00,

0x00,0x04,0x00,

0x00,0x18,0x00,

0x00,0x60,0x00,

0x03,0x80,0x00,

0x1C,0x00,0x00,

0x00,0x00,0x00,

/* “恆”字 */

0x00,0x00,0x00,

0x08,0x00,0x00,

0x0E,0x00,0x00,

0x0C,0x00,0x08,

0x0C,0x7F,0xFC,

0x0C,0x00,0x00,

0x06,0x00,0x00,

0x05,0x20,0x10,

0x05,0xBF,0xF0,

0x24,0x30,0x30,

0x24,0x30,0x30,

0x64,0x30,0x30,

0x44,0x3F,0xF0,

0x04,0x30,0x30,

0x04,0x30,0x30,

0x04,0x30,0x30,

0x04,0x30,0x30,

0x04,0x3F,0xF0,

0x0C,0x30,0x20,

0x0C,0x00,0x00,

0x0C,0x00,0x04,

0x0D,0xFF,0xFE,

0x0C,0x00,0x00,

0x00,0x00,0x00

};

void printChineseCharVertical(int * data ,int dataSize)

{

int i,j,k,n;

int bit;

// 計算漢字個數

int numOfChar = dataSize/( WIDTH * HEIGHT / 8);

for(n=0;nnumOfChar;n++)

{

for(i=0;iHEIGHT;i++)

{

for(j=0;jWIDTH;j++)

{

bit = data[n*(WIDTH * HEIGHT / 8) + i * WIDTH / 8 + j/8] (1(7-j%8));

if(bit)

{

printf(“%s”,FRONT_COLOR);

}

else

{

printf(“%s”,BACKGROUND_COLOR);

}

}

printf(“\n”);

}

}

}

void printChineseCharHorizontal(int * data ,int dataSize)

{

int i,j,k,n;

int bit;

// 計算漢字個數

int numOfChar = dataSize/( WIDTH * HEIGHT / 8);

for(i=0;iHEIGHT;i++)

{

for(j=0;jnumOfChar*WIDTH;j++)

{

bit = data[(j/WIDTH)*(WIDTH*HEIGHT/8) + i*WIDTH/8 + j%WIDTH/8] (1(7-j%WIDTH%8));

if(bit)

{

printf(“%s”,FRONT_COLOR);

}

else

{

printf(“%s”,BACKGROUND_COLOR);

}

}

printf(“\n”);

}

}

int main(int argc, char *argv[])

{

printChineseCharVertical(name1,sizeof(name1)/sizeof(int));

printChineseCharHorizontal(name1,sizeof(name1)/sizeof(int));

return 0;

}

/*

* *

******************

** ** * *

** ** * *

** ** * *

** ** * *

*****************

** * *

**

** *

** *********

** **

** * **

** ** *

* ** **

* * **

*

**

**

***

***

*

***

** *

** *************

**

**

* * * *

* ** **********

* * ** **

* * ** **

** * ** **

* * **********

* ** **

* ** **

* ** **

* ** **

* **********

** ** *

**

** *

** ****************

**

*

* * ***

****************** ** *

** ** * * ** *************

** ** * * **

** ** * * **

** ** * * * * * *

***************** * ** **********

** * * * * ** **

** * * ** **

** * ** * ** **

** ********* * * **********

** ** * ** **

** * ** * ** **

** ** * * ** **

* ** ** * ** **

* * ** * **********

* ** ** *

** **

** ** *

*** ** ****************

*** **

*/

C語言是如何用16點陣方法輸出漢字的?

到目前為止,我們編寫的C 程序,其用於人機交互的提示或菜單都是英文

的,那麼如何在沒有漢化的Turbo C 集成開發環境下編製顯示漢字的程序呢?

解決這一編程問題,我們首先必須了解有關漢字編碼及字庫的知識。根據對漢字使

用頻率的研究,可把漢字分成高頻字(約100 個),常用字(約3000 個),次常用字(約4000 個),

罕見字(約8000 個)和死字(約45000 個),即正常使用的漢字達15000 個。我國1981 年公布

了《通訊用漢字字符集(基本集)及其交換碼標準》GB2312-80 方案,把高頻字、常用字、和

次常用字集合成漢字基本字符集(共6763 個),在該集中按漢字使用的頻度,又將其分為一

級漢字3755 個(按拼音排序)、二級漢字3008 個(按部首排序),再加上西文字母、數字、圖

形符號等700 個。

漢字編碼:

區位碼

國家標準的漢字字符集(GB2312—80)在漢字操作系統中是以漢字庫的形式提供的。漢

字庫結構作了統一規定,即將字庫分成94 個區,每個區有94 個漢字(以

位作區別)每一個漢字在漢字庫中有確定的區和位編號(用兩個字節),這就是所謂的區位碼

(區位碼的第一個字節表示區號,第二個字節表示位號,因而只要知道了區位碼,就可知道

該漢字在字庫中的地址,每個漢字在字庫中是以點陣字模形式存儲的,如一般採用16×16

點陣形式,每個點用一個二進位表示,存1 的點,當顯示時,可以在屏上顯示一個亮點,存

0 的點,則在屏上不顯示,這樣把存某字的16×16 點陣信息直接用來在顯示器上按上述原

則顯示,則將出現對應的漢字。

內碼

漢字使用兩字節表示,國家制定了統一標準,稱為國標碼。國標碼規定,每個字節使用

後面7 位,第一位為0。為了區別於英文的ASCII 碼,國標碼在計算機上使用的時候,規定

漢字每個字節第一位設置為1,以表示該兩字節為漢字,稱為內碼。以“大”字為例子:

國標碼3473H: 0 0 1 1 0 1 0 0 0 1 1 1 0 0 1 1

內碼B4F3H: 1 0 1 1 0 1 0 0 1 1 1 1 0 0 1 1

國標碼與內碼有一定的轉換公式,即16 進制的區位碼,兩個字節各加80H,就成為了

國標碼。

漢字字模在字庫中存放的位置根據漢字的區位碼來確定,內碼是漢字在機內的表示。由

於區位碼和內碼存在固定的轉換關係,所以當在支持漢字輸入的系統中,鍵盤輸入的漢字內

碼即在程序中存在,將其轉換為區位碼,再從字庫中找到對應的漢字字模,然後再用有關的

位操作和循環語句,對每個字節的每一位進行判斷,如同過濾一樣,如果某位是1,則按設

置的顏色在屏幕的相應位置畫點(用graphics.h 中的顯示象素點的函數putpixel()),若某位

為0,則不畫點,這樣就可按預先設置的顏色在相應位置顯示出該漢字來。

內碼到區位碼的轉換

若漢字內碼為十六進制數h2h1l2l1,則區號qh 相位號wh 分別為:

qh= h2h1-0xa0;

wh= l2l1-0xa0;

若用十進制表示內碼為dld2,則

qh=dl-l60;

wh=d2-160;

即區位碼qw 為:

qw=100*(d1-160)十(d2-160);

反過來,若已經知道了區位碼qw。則也可求得區號和位號:

qh=qw/100;

wh=qw-100*qh;

因而該漢字在漢字庫中離起點的偏移位置(以字節為單位),可計算為:

offset=(94*(qh-1)+(wh-1))* 32;

注意:字庫中每1 區有94 個字符。

這樣,就可以找尋到文件的偏移量,讀出一個char bytes[32]數組。這樣bytes 數組中則

存了要顯示漢字的16×16 點陣字模,然後將字模按行掃描的辦法,通過循環用putpixel()函

數在屏幕設定位置顯示出象點,因而組合成一個顯示的漢字。

如何在C程序中顯示12或16點的點陣漢字

 在許多c程序設計中,要用到漢字進行提示或人機交互,而現行的turbo c集成開發環境不是漢化的,如何編製能顯示漢字的c程序呢?

下面的方法可以幫你在西文環境下顯示漢字。這種方法是調用中文漢字庫進行漢字顯示。國家標準規定:漢字庫分94個區,每個區有94個漢字(以位作區別),每個漢字在漢字庫中有確定的區和位編號,這就是漢字的區位碼。每個漢字在庫中是以點陣字模形式存儲的,一般採用16×16點陣(32字節)、24×24點陣(72字節),每個點用一個二進制位(0或1)表示,對應在屏幕上顯示出來,就是相應的漢字。

由於在中文環境下,輸入的是漢字的內碼,我們必須將之轉換成區位碼,算出偏移量,從字庫中找到對應的漢字,將其字模顯示即可。

內碼轉換成區位碼方法如下:

qh=c1-0xa0 wh=c2-0xa0

其區位碼就是:

qw=qh*0xff+wh

該漢字在字庫中離起點的位置是:

offset=(94*(qh-1)+(wh-1))*32l

程序例:

#include 〈graphics.h〉

#include 〈stdio.h〉

#include 〈fcntl.h〉

#include 〈io.h〉

#include 〈stdlib.h〉

#include 〈conio.h〉

#define row 1 //縱坐標放大倍數

#define col 2 //橫坐標放大倍數

void main()

{

int x,y;

char *s=″漢字顯示程序″;

file *fp;

char buffer[32]; //buffer用來存儲一個漢字

register m,n,i,j,k;

unsigned char qh,wh;

unsigned long offset;

int gd=detect,gm; //圖形屏幕初始化

initgraph(&gd,&gm,″ ″);

if ((fp=fopen(″hzk16″,″rb″))==null)

//打開漢字庫,該字庫可以在ucdos中找到

{ printf(″can’t open haz16,please add it″);

getch(); closegraph(); exit(0);

}

x=20; y=100; //顯示位置設置

while(*s)

{ qh=*(s)-0xa0; //漢字區位碼

wh=*(s+1)-0xa0;

offset=(94*(qh-1)+(wh-1))*32l; //計算該漢字在字庫中偏移量

fseek(fp,offset,seek_set);

fread(buffer,32,1,fp); //取出漢字32字節的點陣字模存入buffer中(一個漢字)

for (i=0;i〈16;i++) //將32位字節的點陣按位在屏幕上打印出來(1:打印,0:不打印),顯示漢字

for(n=0;n〈row;n++)

for(j=0;j〈2;j++)

for(k=0;k〈8;k++)

for(m=0;m〈col;m++)

if (((buffer[i*2+j]〉〉(7-k))&0x1)!=null)

putpixel(x+8*j*col+k*col+m,y+i*row+n,green);

s+=2; //因為一個漢字內碼佔用兩個字節,所以s必須加2

x+=30;

}

getch();

closegraph();

}

上述程序在turbo c 2.0編譯系統下運行成功,它可以將漢字放大顯示,讀者可以將它改成函數用在您的程序中顯示漢字。

參考gugu99的博客

求用C語言編寫一個能把txt文檔中的所有漢字採用點陣輸出的程序

這基本是一個不可能看成的任務,按照變成的思路,你應該為每一個單獨的漢子進行編寫一個相應的函數,然後讀入txt文檔之後,進行每個字的對應比對。簡單一點你可以按照五筆的想法把漢字進行分解,但是你讀入的漢字就需要結構辨識,這也是很麻煩的。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/193796.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 09:41
下一篇 2024-12-02 09:41

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 進擊的漢字拆字窗

    進擊的漢字拆字窗是一款非常有用的中文工具,它可以幫助人們更好的學習漢字,了解漢字的含義,以及更好的了解漢字在中文中的運用和意義。 一、功能介紹 進擊的漢字拆字窗主要有以下幾個功能:…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論