漢字的存儲問題

今天在寫分詞程序中碰到了漢字的存儲問題,特做標記以下:測試

漢字機內碼在計算機的表達方式的描述是,使用二個字節,每一個字節最高位一位爲1。計算機中,補碼第一位是符號位 1表示爲負數。因此漢字機內碼的每一個字節表示的十進制數都是負數,統計輸入字符串含有幾個漢字,只須要求出字符串 中小於0的字符有幾個,將它除以2就獲得答案操作系統

漢字在計算機裏是用機內碼錶示,國家標準的漢字字符集在漢字操做系統中是以漢字庫的形式提供的。漢字庫規定, 把字庫分爲94個區(區號),每一個區有94個漢字(位號),這就是所謂的區位碼(區位碼第一字節是區號,第二字節 是位號,由於知道了區位碼就等於知道了該漢字在字庫中的位置)。每一個漢字在字庫中是以點陣字模形式存儲的,如 通常採用1616點陣形式,這樣就須要32個字節。在1616點陣裏,存1的點在顯示時爲一個亮點,存0的點不顯示, 這樣漢字就顯示出來了。 0000001100000000 0000001100000000 0000001100000000 0000001100000010 1111111111111110 0000001100000000 0000001100000000 0000001100000000 0000001100000000 0000001110000000 0000011001000000 0000110000100000 0001100000010000 0001000000011000 0010000000001110 1100000000000100 這樣當須要顯示「大」這個漢字時,首先要把這個字模取出,而後逐位顯示,1顯示0不顯示,屏幕上就會出現「大」這個漢字 那麼咱們怎麼知道漢字的區位碼呢?漢字的機內碼和區位碼的轉換關係是(以"大"爲例) 區號B4-A0 位號F3-A0 也就是說,把內碼減去A0就是區位碼,那麼「大」這個漢字的區位碼就出來了,是在14H區53H好,也就是第20區第83號。 那麼因爲每一個區有94個漢字,「大」這個字應該就是在漢字庫的第(20-1)*94+(83-1)個漢字位置(每一個漢字字模佔32字節)code

例子測試以下:字符串

<!-- lang: cpp -->
int x = -96;
string m = "大";
int quma = int(m[0]) - x;
int weima = int(m[1]) - x;

因爲十六進制0xa0不能表示負數,故直接用-96表示,程序輸出結果是quma=20,weima=83string

相關文章
相關標籤/搜索