国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C程序?qū)崿F(xiàn)漢字內(nèi)碼與GB碼

2019-11-18 16:31:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  // HZEncode.cpp : Defines the entry point for the console application.

  //

  /*

  參考文獻(xiàn):

  漢字的編碼和表示

  1)漢字交換碼(國(guó)標(biāo)碼) 漢字交換碼(國(guó)標(biāo)碼)主要用于漢字信息交換。

  國(guó)標(biāo)碼:以國(guó)家標(biāo)準(zhǔn)局1980年頒布的《信息交換用漢字編碼字符集"基本集》(代號(hào)為GB2312 80)規(guī)定的漢字交換碼作為國(guó)家標(biāo)準(zhǔn)漢字編碼。 GB2312 80中共有7445個(gè)字符符號(hào): 漢字符號(hào)6763個(gè) 一級(jí)漢字3755個(gè)(按漢語(yǔ)拼音字母順序排列) 二級(jí)漢字3008個(gè)(按部首筆劃順序排列) 非漢字符號(hào)682個(gè) GB2312 80規(guī)定,所有的國(guó)標(biāo)碼漢字及符號(hào)組成一個(gè)94 94的方陣。在此方陣中,每一行稱為一個(gè)"區(qū)",每一列稱為一個(gè)"位"。這個(gè)方陣實(shí)際上組成一個(gè)有94個(gè)區(qū)(編號(hào)由01到94),每個(gè)區(qū)有94個(gè)位(編號(hào)由01到94)的漢字字符集。 一個(gè)漢字所在的區(qū)號(hào)和位號(hào)的組合就構(gòu)成了該漢字的"區(qū)位碼"。其中,高兩位為區(qū)號(hào),低兩位為位號(hào)。這樣區(qū)位碼可以唯一地確定某一漢字或字符;反之,任何一個(gè)漢字或符號(hào)都對(duì)應(yīng)一個(gè)唯一的區(qū)位碼,沒(méi)有重碼。

  區(qū)位碼分布情況如下:

  區(qū) 號(hào) 內(nèi) 容 1區(qū) 鍵盤上沒(méi)有的各種符號(hào) 2區(qū) 各種序號(hào) 3區(qū) 鍵盤上的各種符號(hào)(按中文方式給出) 4 -5區(qū) 日文字母 6區(qū) 希臘字母 7區(qū) 俄文字母 8區(qū) 標(biāo)識(shí)拼音聲調(diào)的母音及拼音字母名稱 9區(qū) 制表符號(hào) 10- 15區(qū) 未用 16-55區(qū) 一級(jí)漢字(按拼音字母順序排列) 56- 87區(qū) 二級(jí)漢字(按部首筆劃順序排列) 88- 94區(qū) 自定義漢字

  由上可以看出,所有漢字與符號(hào)的94個(gè)區(qū),可以分為四個(gè)組:

  ①1 -15區(qū):為圖形符號(hào)區(qū)。其中1 9區(qū)為標(biāo)準(zhǔn)符號(hào)區(qū);10 15區(qū)為自定義符號(hào)區(qū)。

  ②16 -55區(qū):為一級(jí)漢字區(qū),包含3755個(gè)漢字。這些區(qū)中的漢字按漢語(yǔ)拼音順序排序,同音字按筆畫順序列出。

  ③56 -87區(qū):為二級(jí)漢字區(qū),包含3008個(gè)漢字。這些區(qū)中的漢字是按部首筆劃順序排序的。

  ④88 -94區(qū):為自定義漢字區(qū)。

  國(guó)標(biāo)碼規(guī)定,每個(gè)漢字(包括非漢字的一些符號(hào))由2字節(jié)代碼表示。每個(gè)字節(jié)的最高位為0,只使用低7位,而低7位的編碼中又有34個(gè)適用于控制用的,這樣每個(gè)字節(jié)只有27 - 34 = 94個(gè)編碼用于漢字。2個(gè)字節(jié)就有94 94=8836個(gè)漢字編碼。在表示一個(gè)漢字的2個(gè)字節(jié)中,高字節(jié)對(duì)應(yīng)編碼表中的行號(hào),稱為區(qū)號(hào);低字節(jié)對(duì)應(yīng)編碼表中的列號(hào),稱為位號(hào)。

  漢字國(guó)標(biāo)碼的范圍用二進(jìn)制表示是: 00100001 00100001 01111110 01111110 (1+32)10 (1+32)10 (94+32)10 (94+32)10 7 位ASCII碼是128個(gè)字符組成的字符集。其中編碼值0 31(00000000 00011111)不對(duì)應(yīng)任何印刷字符,通常稱為控制符,用于計(jì)算機(jī)通信中的通信控制或?qū)τ?jì)算機(jī)設(shè)備的功能控制。編碼值32(00100000)是空格字符SP。編碼值127(1111111)是刪除字符DEL。

  漢字國(guó)標(biāo)碼的起始二進(jìn)制位置選擇00100001即(33)10是為了跳過(guò)ASCII碼的32個(gè)控制字符和空格字符。所以,漢字國(guó)標(biāo)碼的高位和低位分別比對(duì)應(yīng)的區(qū)位碼大(32)10或(00100000)2或(20)H,即: 國(guó)標(biāo)碼高位 = 區(qū)碼 + 20H (H表示十六進(jìn)制) 國(guó)標(biāo)碼低位 = 位碼 + 20H

  2) 漢字機(jī)內(nèi)碼(內(nèi)碼)(漢字存儲(chǔ)碼)

  漢字機(jī)內(nèi)碼(內(nèi)碼)(漢字存儲(chǔ)碼)的作用是統(tǒng)一了各種不同的漢字輸入碼在計(jì)算機(jī)內(nèi)部的表示。 為了將漢字的各種輸入碼在計(jì)算機(jī)內(nèi)部統(tǒng)一起來(lái),就有了專用于計(jì)算機(jī)內(nèi)部存儲(chǔ)漢字使用的漢字機(jī)內(nèi)碼,用以將輸入時(shí)使用的多種漢字輸入碼統(tǒng)一轉(zhuǎn)換成漢字機(jī)內(nèi)碼進(jìn)行存儲(chǔ),以方便機(jī)內(nèi)的漢字處理 漢字機(jī)內(nèi)碼是在計(jì)算機(jī)內(nèi)部存儲(chǔ)、處理的代碼。計(jì)算機(jī)既要處理漢字,又要處理英文。因此計(jì)算機(jī)必須能區(qū)別漢字字符和英文字符。英文字符的的機(jī)內(nèi)碼是最高為為0的8位ASCII碼。為了不與7位ASCII碼發(fā)生沖突,把國(guó)標(biāo)碼每個(gè)字節(jié)的最高位由0改為1,其余位不變的編碼作為漢字字符的機(jī)內(nèi)碼。

  漢字機(jī)內(nèi)碼的范圍用二進(jìn)制表示是: 10100001 10100001 11111110 11111110 機(jī)內(nèi)碼的高位和低位比對(duì)應(yīng)的國(guó)標(biāo)碼的高位和低位大(128)10或(10000000)2或(80)H 即: 機(jī)內(nèi)碼高位 = 國(guó)標(biāo)碼高位 + 80H 機(jī)內(nèi)碼低位 = 國(guó)標(biāo)碼低位 + 80H 又因?yàn)椋?國(guó)標(biāo)碼高位 = 區(qū)碼 + 20H 國(guó)標(biāo)碼低位 = 位碼 + 20H 所以: 機(jī)內(nèi)碼高位 = 區(qū)碼 + A0H 機(jī)內(nèi)碼低位 = 位碼 + A0H 也就是說(shuō),機(jī)內(nèi)碼高位和機(jī)內(nèi)碼低位分別比對(duì)應(yīng)的區(qū)碼和位碼大(160)10或(10100000)2或 (A0)H 例如:漢字"啊"的區(qū)位碼為"1601",其中區(qū)碼為(16)10或(10)H,位碼為(01)10或(01)H。 則: 機(jī)內(nèi)碼高位 = 10H + A0H = B0H 機(jī)內(nèi)碼低位 = 01H + A0H = A1H 所以: 機(jī)內(nèi)碼= B0A1H

以下是引用片段:
<!--[if !supportEmptyParas]--> <!--[endif]-->


  3) 漢字輸入碼(外碼)

  漢字輸入碼(外碼)是為了通過(guò)鍵盤字符把漢字輸入計(jì)算機(jī)而設(shè)計(jì)的一種編碼。 英文輸入時(shí),相輸入什么字符便按什么鍵,輸入碼和機(jī)內(nèi)碼一致。漢字輸入時(shí),可能要按幾個(gè)鍵才能輸入一個(gè)漢字。 漢字輸入方案有成百上千個(gè),但是這千差萬(wàn)別的外碼輸入進(jìn)計(jì)算機(jī)后都會(huì)轉(zhuǎn)換成統(tǒng)一的內(nèi)碼。 漢字輸入方案大致可分為以下4種類型:

  (1) 音碼:如全拼、雙拼、微軟拼音等

  (2) 形碼:如五筆字型、鄭碼、表形碼等

  (3) 音形碼:如智能ABC、自然碼等

  (4) 數(shù)字碼:如區(qū)位碼、電報(bào)碼等

  4) 漢字字形碼(輸出碼)

  漢字字形碼(輸出碼)用于漢字的顯示和打印,是漢字字形的數(shù)字化信息。 漢字的內(nèi)碼是用數(shù)字代碼來(lái)表示漢字,但是為了在輸出時(shí)讓人們看到漢字,就必須輸出漢字的字形。在漢字系統(tǒng)中,一般采用點(diǎn)陣來(lái)表示字形。 16 *16漢字點(diǎn)陣示意 16 * 16點(diǎn)陣字形的字要使用32個(gè)字節(jié)(16 * 16/8= 32)存儲(chǔ),24 * 24點(diǎn)陣字形的字要使用72個(gè)字節(jié)(24 * 24/8=72)存儲(chǔ)。

  一般來(lái)說(shuō),表現(xiàn)漢字時(shí)使用的點(diǎn)陣越大,則漢字字形的質(zhì)量也越好,當(dāng)然每個(gè)漢字點(diǎn)陣所需的存儲(chǔ)量也越大。

  5) 漢字地址碼

  漢字地址碼是指漢字庫(kù)(這里主要指整字形的點(diǎn)陣式字模庫(kù))中存儲(chǔ)漢字字形信息的邏輯地址。在漢字庫(kù)中,字形信息都是按一定順序(大多數(shù)按標(biāo)準(zhǔn)漢字交換碼中漢字的排列順序)連續(xù)存放在存儲(chǔ)介質(zhì)上的,所以漢字地址碼也大多是連續(xù)有序的,而且與漢字內(nèi)碼間有著簡(jiǎn)單的對(duì)應(yīng)關(guān)系,以簡(jiǎn)化漢字內(nèi)碼到漢字地址碼的轉(zhuǎn)換。

以下是引用片段:
*/ 
<!--[if !supportEmptyParas]--> <!--[endif]-->
#include "stdafx.h"
#include "HZEncode.h"
<!--[if !supportEmptyParas]--> <!--[endif]-->
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define UNICODE
#define _UNICODE
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
<!--[if !supportEmptyParas]--> <!--[endif]-->
CWinApp theApp;
<!--[if !supportEmptyParas]--> <!--[endif]-->
using namespace std;
unsigned short* ptr;
char* pszHZ = "啊";
byte bt[] = {0xc4,0xe3,0xBA,0xC3};//“你好”的機(jī)內(nèi)碼
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
       int nRetCode = 0;
<!--[if !supportEmptyParas]--> <!--[endif]-->
       // initialize MFC and PRint and error on failure
       if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
       {
              // TODO: change error code to suit your needs
              cerr << _T("Fatal Error: MFC initialization failed") << endl;
              nRetCode = 1;
       }
       else
       {
              for (int i = 16;i <= 55; i++)
              {
                     byte Temp[3];
                     Temp[2] = 0;
                     Temp[0] = i + 0xA0;
                     for (int j = 1;j < 94;j++)
                     {
                            
                            Temp[1] = j + 0xA0;
                            cout << (LPCTSTR) Temp;
                            
                     }
                     cout << endl;
              }
<!--[if !supportEmptyParas]--> <!--[endif]-->
       }
<!--[if !supportEmptyParas]--> <!--[endif]-->
       system("pause");
       return nRetCode;
}
<!--[if !supportEmptyParas]--> <!--[endif]-->
 
<!--[if !supportEmptyParas]--> <!--[endif]-->


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 贺兰县| 两当县| 瓮安县| 临西县| 林西县| 九寨沟县| 永州市| 九台市| 长子县| 旅游| 屏东市| 和硕县| 古交市| 聂拉木县| 大关县| 沙雅县| 内黄县| 张掖市| 信宜市| 渭源县| 盐津县| 金阳县| 开鲁县| 浑源县| 齐齐哈尔市| 孟连| 山阳县| 临城县| 健康| 民权县| 射阳县| 澳门| 灵台县| 平阴县| 甘南县| 安西县| 江孜县| 西青区| 合山市| 白银市| 丰镇市|