区位码与汉字相互转换的算法

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

区位码与汉字相互转换的算法.txt你无法改变别人,但你可以改变自己;你无法改变天气,但你可以改变心情;你无法改变生命长度,但你可以拓展它的宽度。一、由汉字得到其区位码

标准字库含汉字6763个其中一级汉字3755(按拼音排序)、二级汉字(按部首排序),在加上西文字母、数字、图形符号等700个。字库分为94个区,每个区94个汉字,这就是区位码。汉字处理软件为了实现中西文汉字共同显示又不发生冲突。用码值160以上的ASCII用来当汉字内码,

每个汉字由两个字符组成,其中前一个字节表示区码,后一个字节表示位码.

区位码汉字部分取值范围是1601--8794(由WIN2000中区位输入法实际操作得出)

可以根据其两个字节的ASC码得到该字的区位码

计算公式:区码=ASC(a) - 160

位码=ASC(b) - 160

区位码=区码*100 + 位码

其中:a为第一字节 b为第二字节

根据汉字区位码的取值范围及每个汉字的区ASC码、位ASC码值可以得知:

区ASC码值的范围:176--247

位ASC码值的范围:161--254

在PB中实现汉字区位码的语法格式为:

(ASC(MID(strhz,1,1)) - 160) * 100 + (ASC(MID(strhz,2,1)) - 160)

由于区码和位码减去160后均为两位数字,所以以上算法相当于将两位的区码与位码组合起来,例如:

汉字:中的区ASC码与位ASC码分别为214 208,分别减去160后得54 48,组合后区位码即为5448

二、由区位码得出汉字的算法

1、先得出汉字的两段ASC码

可以设:汉字的区位码为Z,

汉字的区ASC码为X,

汉字的位ASC码为Y,

由本文第一部分所述从汉字得区位码的方法可以列出如下公式

(x - 160) * 100 + (y - 160) = Z

推导可得 Z = 100X + y - 16160

当我们已知一个汉字的区位码(Z)时,又已知X的变化范围为176--247,Y的变化范围为161--254

可以做出以下程序:

int ascqm,ascwm

string strhz

for ascqm = 176 to 247

for ascwm = 161 to 254

if 100 * ascqm + ascwm - 16160 = z then

messagebox("","ascqm=" + string(ascqm) + " " + "ascwm=" + string(ascwm))

end if

next

next

经验证,以上程序得出的区码和位码一定是唯一值,即汉字的ASC编码

有一个更简单的方法:

将区位码分成两部分,每部分分别加160即可得到区ASC码和位ASC码,算法如下:区ASC码=INTEGER(MID(mid_str,1,2)) + 160

位ASC码=INTEGER(MID(mid_str,3,2)) + 160

2、得出区ASC码和位ASC后,将其组合输出即可得汉字

strhz = char(ascqm) + char(ascwm)

相关文档
最新文档