区位码与汉字相互转换的算法
标准字库含汉字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)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。