日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux点阵ascii像素字体,点阵字体显示系列之一:ASCII码字库的显示 | 迟思堂工作室...

發(fā)布時(shí)間:2025/3/19 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux点阵ascii像素字体,点阵字体显示系列之一:ASCII码字库的显示 | 迟思堂工作室... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

起因:

早在閱讀tslib源代碼時(shí)就注意到里面有font_8x8.c和font_8x16.c兩個(gè)文件(后來(lái)才得知,它們來(lái)自Linux內(nèi)核,具體目錄是./drivers/video/console),它們包含了在屏幕上顯示所需的所有字符(當(dāng)然,是可打印字符),由此也看了一下tslib顯示字符的代碼。對(duì)將來(lái)在觸摸屏上顯示漢字有所幫助,——這是后話,暫且按下不提。

上面所說(shuō)的字符當(dāng)然是ASCII碼了,這種編碼學(xué)過(guò)計(jì)算機(jī)的人可能會(huì)很熟悉,就不多講了。本文所述者,就是通過(guò)ASCII碼字庫(kù)文件(網(wǎng)上有下載)和上面提到的其中之一的文件在終端上顯示ASCII字符。這也為研究漢字顯示打下基礎(chǔ)(此為假話,寫文章及做作所需也,實(shí)際上本文作者是先研究漢字顯示再研究ASCII碼顯示的,勿模仿,切切)。

本文中使用的字庫(kù)是8×16,每個(gè)字符占用內(nèi)存空間為16字節(jié)(后面不再提及),文中顯示字符所做工作有下面幾步(顯示漢字也差不多,當(dāng)然,這又是后話 ):

1、打開(kāi)字庫(kù)文件(似乎是廢話);

2、計(jì)算出要打印的字符在字庫(kù)文件中的偏移量(亦即網(wǎng)上所說(shuō)的“尋址”);

3、將這個(gè)偏移地址的數(shù)據(jù)(16字節(jié))讀取緩沖區(qū)中;

4、顯示這個(gè)緩沖區(qū),為1者打印,為0者留空。(由于是在終端上顯示,因此,可以使用如“#”、“*”等字符代替。)

先說(shuō)說(shuō)如何找到某個(gè)字符在字庫(kù)文件中的偏移量。字庫(kù)里的字符排序是符合ASCII碼順序的,而每個(gè)字符占16字節(jié),因此,將要打印的字符與16相乘,便得到這個(gè)字符在字庫(kù)中的位置了,這個(gè)位置之后的16個(gè)字節(jié)的數(shù)據(jù),就是這個(gè)字符了。比如大寫字母“A”,十六進(jìn)制是0x41(“A”還是十進(jìn)制的65、八進(jìn)制的101,其實(shí)都是一回事),它與0x10(十進(jìn)制的16)相乘,得到0x410(計(jì)算機(jī)中使用十六進(jìn)制十分方便,對(duì)于某些試題要求計(jì)算出某地址的十進(jìn)制,我表示不理解,既不直觀,又不方便,還容易出錯(cuò))。使用十六進(jìn)制編輯器(用UE相信會(huì)更方便些)查看這個(gè)偏移量,會(huì)發(fā)現(xiàn)有如下數(shù)據(jù):

$ hexdump -C ../HZK/ASC16 | grep 41000000410? 00 00 10 38 6c c6 c6 fe? c6 c6 c6 c6 00 00 00 00? |…8l………..|

所謂的字庫(kù),里面就是一些二進(jìn)制數(shù)據(jù)。我們看看上面得到“A”的16個(gè)字節(jié)數(shù)據(jù)顯示效果是怎樣的。將上面的十六進(jìn)制數(shù)據(jù)按二進(jìn)制輸出,一個(gè)字節(jié)一行,共占16行,如下:

0000000000000000

00010000

00111000

01101100

11000110

11000110

11111110

11000110

11000110

11000110

11000110

00000000

00000000

00000000

00000000

不直觀,將出現(xiàn)0的地方留空,則變成如下形狀(受網(wǎng)頁(yè)影響,為美觀起見(jiàn)進(jìn)行調(diào)整,雖非實(shí)際中二進(jìn)制所示,但形狀是一致的):

1

111

11? 11

11????? 11

11????? 11

1111111

11????? 11

11????? 11

11????? 11

11????? 11

上面的便是傳說(shuō)中的“A”了。

下面就用代碼讀取字庫(kù)信息,并顯示出來(lái)。完整代碼如下:

/***************************************************源代碼文件編碼:ANSI

測(cè)試環(huán)境編碼:zh_CN.UTF-8、zh_CN.gd2312

* ************************************************/

#include#include

#include

#include

#include

#include

#include

#include

#ifdef?DEBUG

#define?debug(fmt,?…)?printf(fmt,?#__VA_ARGS__)

#else

#define?debug(fmt,?…)

#endif

void?display_font_ascii(char?*asc)

{

int?i,?j;

debug(“=================n”);

for(i=0;i<16;i++)

{

for(j=0;j<8;j++)

{

/*?逐位相與,為1者打印“*”,否則打印空格?*/

if(asc[i]?&?(0x80>>j))

printf(“*”);

else

printf(” “);

}

printf(“n”);

}

debug(“=================n”);

}

int?main()

{

int?i;

unsigned?char?*p;

unsigned?char?asciicode[]?=?“Ab”;

unsigned?long?offset;

FILE?*asc;

char?ascii[16];

if((asc=fopen(“ASC16″,“rb”))==NULL)

{

perror(“Can’t Open ASC16″);

exit(0);

}

/*?ASCII字庫(kù)文件?*/

for?(i?=?0;?i?

{

debug(“%c %xn”,?asciicode[i],?asciicode[i]); /*?打印數(shù)值?*/

offset?=?asciicode[i]*16;

debug(“offset: %xn”,?offset); /*?打印偏移量?*/

fseek(asc,offset,SEEK_SET);

fread(ascii,16,1,asc);????????????? /*?讀取16字節(jié)?*/

display_font_ascii(ascii);??????? /*?顯示?*/

}

fclose(asc);

return?0;

}

由于是示意性代碼,不必糾結(jié)于代碼優(yōu)化、代碼風(fēng)格等等問(wèn)題。效果(同樣進(jìn)行了調(diào)整)如下:

$ ./a.out*

***

**? **

**????? **

**????? **

*******

**????? **

**????? **

**????? **

**????? **

***

**

**

****

**? **

**??? **

**??? **

**??? **

**??? **

*****

還有另一種方法,不讀取字庫(kù),而是將所有的字符存放于某個(gè)數(shù)組中,比如像font_8x16.c文件中的fontdata_8x16數(shù)組。這里假設(shè)數(shù)組為ascii_code,那么,上面的代碼只需修改一小部分,如下:

for (i = 0; i < sizeof(asciicode)-1; i++){

debug(“%c %xn”, asciicode[i], asciicode[i]);

offset = asciicode[i]* 16; // 尋址

p = ascii_code+offset;????// 查找字符在ascii_code數(shù)組中的偏移量

debug(“offset: %xn”, offset);

display_font_ascii(p);

}

效果是一樣的,所不同的是,前一種方法需要讀取字庫(kù)文件,后一種方法直接在內(nèi)存中讀取,完整的ASCII碼占用空間為4KB。不過(guò),ASCII中可打印的字符共96個(gè)(經(jīng)過(guò)認(rèn)真數(shù)那些可打印的字符,發(fā)現(xiàn)實(shí)際上是95個(gè)(即32號(hào)到126號(hào)),這里將127號(hào)算上了,具體的請(qǐng)搜索一下ASCII),占用空間為96*16,即1536字節(jié)。由于前面0x20(即32)個(gè)字符在顯示中沒(méi)有用到,因此是可以去掉的,這樣一來(lái),尋址方式又稍有不同,如下:

for (i = 0; i < sizeof(asciicode)-1; i++){

debug(“%c %xn”, asciicode[i], asciicode[i]);

offset = (asciicode[i] – 0x20 )* 16; // 尋址

p = ascii_code+offset;????// 查找字符在ascii_code數(shù)組中的偏移量

debug(“offset: %xn”, offset);

display_font_ascii(p);

}

由于文中涉及知識(shí)、代碼、字庫(kù)文件都可以在網(wǎng)絡(luò)上找到,因此文中就不提供下載了。

資料:

1、ASCII碼字庫(kù),有多種形式,如8*16、8*12,名稱為ASC12、ASC16,搜索一下就能找到。

2、“字庫(kù)數(shù)組”,可以在Linux內(nèi)核源代碼的./drivers/video/console目錄下找到很多相關(guān)代碼文件,如font_8x8.c、font_8x16.c、font_sun8x16.c等等。像font_8x16.c文件,代碼中說(shuō)是由cpi2fnt這個(gè)東西產(chǎn)生的,但搜索一下,沒(méi)什么介紹,英文的又不想去看,對(duì)這個(gè)東西也就不了解了。

3、可以搜索一下字庫(kù)生成工具,用這些工具可以生成需要的字庫(kù)。

總結(jié)

以上是生活随笔為你收集整理的linux点阵ascii像素字体,点阵字体显示系列之一:ASCII码字库的显示 | 迟思堂工作室...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美性猛交xxxx免费看 | 亚洲欧洲一区二区在线观看 | www.色天使| 中文字幕avav | 做爰视频毛片视频 | 欧美精品在线观看视频 | 无码精品一区二区三区在线播放 | 日韩精品中文字幕在线观看 | 在线黄色网页 | 欧美成人一区在线 | www.haoav| 亚洲播播| 国产精品美女久久久 | 国产少女免费观看高清 | 国产精品对白刺激久久久 | 亚洲av成人片无码 | 极品探花在线观看 | 国产色中色 | 97中文在线 | 九九九热| av网站网址 | 成人av动漫 | 超碰在线观看97 | 黄色一区二区三区 | 国产玖玖在线 | 国产人妖ts重口系列网站观看 | 日韩一区二区三区电影 | 亚洲AV成人无码久久 | 一线毛片 | 69热在线观看| 精品一区在线观看视频 | 九九热精品在线观看 | 涩涩涩涩涩涩涩涩涩 | 特级西西444www高清大胆免费看 | 日本做受 | 手机在线免费av | 免费午夜人成电影 | 国产在线观看一区二区三区 | 免费在线色 | www.超碰| 久草视频福利在线 | 久久精品日韩无码 | 国产污污在线观看 | 成人片黄网站久久久免费 | 国产字幕av| 国产一区视频网站 | 中文字幕一二三四 | 蜜桃臀av | 国产女人18毛片水真多18精品 | 一区二区三区色 | 女生扒开腿让男生操 | 亚洲自拍偷拍一区二区三区 | 亚洲一区二区av | 波多野结衣一级 | xxxx国产片 | 成人在线免费观看网站 | 国产视频在线观看一区二区 | 成人精品一区二区三区电影黑人 | 色综合久久久无码中文字幕波多 | 老熟女高潮一区二区三区 | 亚洲熟女www一区二区三区 | 亚洲成人免费看 | 国产精品熟女一区二区不卡 | 日韩欧美中出 | 国产精品二区一区 | 青草伊人久久 | 成人h动漫精品一区二区 | 欧美视频精品在线 | 亚洲精品国产精品国自产网站按摩 | 国产成人av在线播放 | 97色伦影院 | 国产一级片在线 | 欧美一区二区三区免费视频 | 日本一级淫片 | 欧美在线播放一区二区 | 制服丝袜av电影 | 性感美女福利视频 | 超碰免费在 | 免费观看a视频 | 日韩一区二区三区视频在线 | 在线视频免费观看你懂的 | 亚洲精品中文字幕成人片 | 日本美女影院 | 中国精品一区二区 | 一本到av| 91精品久久久久久久久久 | 亚洲啪啪 | 国内视频一区二区三区 | 亚洲日本黄色 | 麻豆免费在线 | 天天av天天 | 国产亚洲精品一区二区三区 | 欧美精品一区二区三区蜜臀 | 隣の若妻さん波多野结衣 | porn麻豆 | 久久久久久久久久久国产精品 | 日韩精品成人av | 福利片在线看 | 国产一区二区精品在线观看 |