字元編碼及字型顯示

2021-10-09 00:02:18 字數 2452 閱讀 1075

計算機的所有資訊都以二進位制表示(二進位制數字)

如:程式中puts(「hello 你好」)

輸出字串資訊,字串在計算機裡面儲存為二進位制數值48 65 6c 6c 57 c4e3 bac3,計算機中傳輸的只是數字,顯示為hello 你好。

字元顯示:數字 -> 代表什麼 ->顯示為「什麼」

字元編碼字型檔案

字元編碼:用什麼數字表示哪個字元

ascii碼-1個位元組

gbk碼-2個位元組  ->編碼方式不同,導致相同數字代表不同的字元->unicode碼

big5碼

unicode只是乙個符號集,它只規定了符號和二進位制**的對應關係,卻沒有規定二進位制**應該如何儲存。utf-8是unicode的實現方式之一(utf-16le,utf-16be),是一種可變長的編碼方式。優點:使用1~4個位元組表示乙個符號,根據不同的符號而變化位元組長度,節省了空間。ee bb bf開頭,每個字元以n個1開頭,編碼容錯性高。

utf-8的編碼規則很簡單,只有二條:

1)對於單位元組的符號,位元組的第一位設為0,後面7位為這個符號的unicode碼。因此對於英語字母,utf-8編碼和ascii碼是相同的。

2)對於n位元組的符號(n>1),第乙個位元組的前n位都設為1,第n+1位設為0,後面位元組的前兩位一律設為10。剩下的沒有提及的二進位制位,全部為這個符號的unicode碼。

如:"abc中"以不同編碼方式儲存

assic:61 62 63 d6d0

utf-8:ef bb bf 61 62 63 e4 b8 ad

utf-16be(大端):fe ff 0061 0062 0063 4e2d

utf-16le(小端):ff fe 6100 6200 6300 2d4e

其中unicode碼的「中」表示為e4 b8 ad,二進位制為:

1110 0100,10 111000,10 101101

而這些剩下的組合起來表示unicode值:4e2d

字型檔案:顯示為什麼,包含編碼表和字型資料(根據編碼表找到對應的字元點陣)。

原始檔中字串用不同的編碼方式儲存,會導致執行時列印結果不一樣。

怎麼解決?可以通過引數來設定,編譯程式時,要指定字符集

man gcc , /charset 搜尋到引數幫助

-finput-charset = charset 表示原始檔的編碼方式, 預設以utf-8來解析 輸入檔案a.c中的字串在電腦中儲存的數值編碼方式

-fexec-charset = charset 表示可執行程式裡的字元以什麼編碼方式來表示,預設是utf-8

gcc -o a a.c

gcc -finput-charset=gbk -fexec-charset=utf-8 -o utf-8_2 ansi.c //指定輸入字符集為gbk,指定輸出字符集為utf-8。

注意:lcd的座標系和笛卡爾座標系是倒著的!座標計算時要轉換

int

main

(int argc,

char

**ar**)

顯示字母

void

lcd_put_ascii

(int x,

int y,

unsigned

char c)

}}

顯示漢字

hzk16字型檔裡16×16的漢字一共需要256個點來顯示,也就是說需要32個位元組才能達到顯示乙個普通漢字的目的。乙個gb2312漢字是由兩個位元組編碼的,範圍為a1a1~fefe。

區碼:區號(漢字的第乙個位元組)-0xa0 (因為漢字編碼是從0xa0區開始的,所以檔案最前面就是從0xa0區開始,要算出相對區碼)

位碼:位號(漢字的第二個位元組)-0xa0

乙個漢字佔兩個位元組,前乙個位元組為該漢字的區號,後乙個位元組為該漢字的位號。每乙個區有94個字元。

漢字在hzk16檔案中的絕對偏移位置:offset=(94*(區碼-1)+(位碼-1))*32

void

lcd_put_chinese

(int x,

int y,

unsigned

char

*str)}}

}

畫素顯示

/* color : 0x00rrggbb */

void

lcd_put_pixel

(int x,

int y,

unsigned

int color)

case16:

case32:

default:}

}

字元編碼和字型

編碼 你有個小盒子,裡面裝了 256 枚印章,每一枚都有編號。你參加了學校的 印章密碼愛好者興趣小組 裡面有個外國來的小女孩,經常跟你玩乙個遊戲,比如你問 今年暑假你去了 她回答說 78,89,67 因為你們都如此熟悉自己的印章,你一下子就明白了她說的是 nyc 那你出生在 呢?你問。她遲疑了一下,...

關於字元及編碼

關於字元及編碼 首先,我們要知道一些概念和標準。字元和位元組是兩個容易混淆的概念,下面我們來看一下它們的含義。字元 人們用來表示某種意義的符號,如 1 a 字 等。位元組 位元組是儲存空間的基本計量單位,由8個二進位制位構成。字串 零個或多個字元組成的有限序列。字符集 字元的集合,由於歷史原因形成了...

字型編碼介紹

ascii碼 ascii碼一共規定了128個字元的編碼,對英語字元與二進位制位之間的關係,做了統一規定。這128個符號 包括32個不能列印出來的控制符號 只占用了乙個位元組的後面7位,最前面的1位統一規定為0。非ascii編碼 不同的國家有不同的字母,哪怕都使用256個符號的編碼方式,代表的字母卻不...