計算機的所有資訊都以二進位制表示(二進位制數字)
如:程式中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個符號的編碼方式,代表的字母卻不...