区位码与汉字相互转换的算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)