教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> 编程基地 >> VC++ >> C++: BIG5到GB RSS订阅
C++: BIG5到GB
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   
     中文因为数量太多,所以与英文用ASCII码一个字节表示不同,它使用两个字节来表示。通过计算这两个字节,我们可以得到其表示的汉字在中文字库中的位置。读取该位置的若干字节,以获得表示这个汉字的点阵信息。有了这些信息,就可以分别在DOS或WINDOWS中显示该汉字。事实上,在文本文件中保存的就是每个汉字对应的两个字节编码,而显示问题由中文操作系统自动解决。 

汉字编码并不统一,我们使用的是GB码,而台湾地区使用的是BIG5码。BIG5码文件中保存的是汉字相应的BIG5编码,GB码文件中保存的是汉字相应的GB编码(这也就是“乱码现象”的来由)。所以转换工作的关键是有一个记录每个BIG5编码对应GB编码的码表文件。 
第一步 制作码表文件 

BIG5码编码规则是这样的:每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE,共126种。第二个字节的范围分别为0X40-0X7E,0XA1-0XFE,共157种。也就是说,利用这两个字节共可定义出 126 * 157=19782种汉字。这些汉字的一部分是我们常用到的,如一、丁,这些字我们称为常用字,其BIG5码的范围为0XA440-0XC671,共5401个。较不常用的字,如滥、调,我们称为次常用字,范围为 0XC940-0XF9FE,共7652个,剩下的便是一些特殊字符。 

制作码表文件的原理是这样的:首先将所有的BIG5编码写入一个文件,然后,使用具有BIG5码到GB码转换功能的软件,如地球村、东方快车、四通利方,将文件转换为GB码文件,即得到码表文件。 

下面的源程序将所有可能的BIG5编码(0XA100-0XFEFF)写入文件“Table.TXT”。 

//TURBO C++ 3.0 
#include 
#include 
void main(){ 
FILE * codefile; 
int i,j,k; 
codefile=fopen(table.txt,w+b); 
for (i=0xa1;i<=0xfe;I++){ 
for(j=0x00;j<=0xff;j++){ 
fwrite(& i,1,1,codefile); 
fwrite(& j,1,1,codefile);} 

fclose(codefile); 
return; 

运行地球村、东方快车或四通利方,将“Table.txt”从BIG5码转换为GB码,即获得码表文件。 

第二步 转换 
下面的源程序,将BIG5码文件转换为GB码文件。 
//TURBO C++3.0 
#include 
#include 
void main(){ 
int que, wei; 
FILE * sourcefile; 
FILE * tabfile; 
FILE * destfile; 
sourcefile = fopen(big.txt, r+b); 
//BIG5 码文件 
tabfile = fopen(table.txt, r+b); 
//码表文件 
destfile = fopen(gb.txt,w+b); 
//转换生成的GB码文件 
while (!feof(sourcefile)){ 
fread(& que,1,1,sourcefile); 
if (feof(sourcefile)){ 
break; } 
if (que> =0xa1 && que <=0xfe) 
//叛断是否汉字(BIG5编码) 
{fread(& wei,1,1,sourcefile); 
if (wei<0xa1) wei = wei - 0x40; 
if (wei>=0xa1) wei = wei - 0xa1 + 0x7e - 0x40 + 1; 
fseek(tabfile, 2 * ((que -0xa1) * (0xfe - 0xa1 + 1 + 0x7e - 0x40 + 1 ) + wei), SEEK_SET); 
fread(& que,1,1,tabfile); 
fread(& wei,1,1,tabfile); 
fwrite(& que,1,1,destfile); 
fwrite(& wei,1,1,destfile); 

else 
fwrite(& que,1,1,destfile); //处理英文 

fclose(sourcefile); 
fclose(tabfile); 
fclose(destfile); 
return; 

以上程序在Win95/97,TC3.0 通过。稍加修改,也可用于VC或VB程序中。用同样的方法,我们也可以将GB码转换为BIG5码。 

本文来自中国程序员网站 

来源:编程技术-十度教育
作者:
关键字:C++,BIG5到GB
发表日期:2006-10-18 13:47:54

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:处理内存泄漏的一种MFC方法   下一篇:C++程序的缓冲区溢出攻击


2008-10-8 6:20:20
本文的相类似文章
  • VC++ Oracle 开发入门教程
  • Oracle Pro*C/C++游标和存储过程性能测试报告
  • Linux平台C++类库tinycxx使用说明
  • Linux 上的 C/C++ 编译器和调试器
  • 用C++ 产生 SQL*Loader 各类文件
  • 在Visual Basic 中使用C++ 类
  • 怎样把VC++代码转换成VB代码
  • 在VB中如何调用C++Builder创建的DLL
  • 怎样把VC++代码转换成VB代码
  • 在Visual Basic 中使用C++ 类
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com