请教数据算法:输入16进制GB码即可得到GB码相应的汉字(32分是我能给的最高分,不好意思)

bgxy 2001-06-02 11:42:00
我想写一个输入16进制GB码即可得到GB码相应的汉字的程序,例如如果“中”字的GB码为“5E3A1”,作为参数,输入5E3A1之后,函数返回“中”字。数据结构很简单:汉字和它的GB码。
想法是把所有的汉字和相应的GB码存到一个二进制文件中(也许会累死我,但时间来得及),通过高速的算法根据GB码查找汉字,用case:太慢了,向高手请教高速查找的算法。

谢谢!(32分是我能给的最高分,不好意思)
...全文
253 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wowboy 2001-06-05
  • 打赏
  • 举报
回复
我是说先用Excel,或自己编一个程序,生成一个与国标码一一对应的数据库。
wowboy 2001-06-05
  • 打赏
  • 举报
回复
你这样做太夸张了吧。
你可以先建一个数据库,至于生成简单得很用Excel都可以做得。
然后你可以用ADO连接,然后用SQL来查询。
bgxy 2001-06-05
  • 打赏
  • 举报
回复
To Duz & wowboy
谢谢解答!
如果象二位所说,“中”字可以用的16进制“5650”,“啊”字可以用“A1B0”表示。
我现在想到的算法太慢了:
以VB的dll为例

Public Property Get Search_By_code(code As String) As String
Select Case Left(code, 1)
Case "A" '16进制的第一位是A
Select Case code
Case A1B0:啊
Case ******
Case ******
end select
case "B" '16进制的第一位是B
Select Case code
Case ******
Case ******
end select
Case "5" '16进制的第一位是5
Select Case code
Case 5650:中
Case ******
Case ******
end select
end select
end Property

使用这个函数对象时,建立实例之后,只要执行Search_By_code属性,即可得到响应汉字
Search_By_code(5650)="中"
Search_By_code(A1B0)="啊"

有效率更高的方法吗?比如把Get Search_By_code的内容放在一个文件中?
bgxy 2001-06-05
  • 打赏
  • 举报
回复
感谢各位的帮助!
这个愚蠢问题还是暂时告一段落吧。

我去闭关修炼几天先。
wowboy 2001-06-05
  • 打赏
  • 举报
回复
不过我明你的意思,其实要是在支持中文的windows,只要直接把输入的国标码按照我最初的回答,把它转成字符就行了。
我在BCB这样做是行的。VB中也有Asc这个函数。
char c[4];
if(Edit1->Text.Length()==4){
AnsiString a,b;
a+=Edit1->Text[1];
a+=Edit1->Text[2];
b+=Edit1->Text[3];
b+=Edit1->Text[4];
sprintf(c,"%c%c",StrToInt(a)+160,StrToInt(a)+160);
Edit2->Text=c;
}
wowboy 2001-06-05
  • 打赏
  • 举报
回复
把一个汉字的四个区位码的前两位和后两位分别作如下处理:
区位码+20H=国标码
国标码+80H=机内码
一个汉字由两个字节组成的。
我不知你指的16进制的是国标码还是区位码。
要是国标码的。
另外我想你的“中”的国标码错了。“中”的区位码是"5448"当然我指的区位码是十进制的。所以它的国标码应该是四位的十六制的。即它的国标码是"8680D"也即十六进制的"5650",所以如果你知道国标码的话。
你只要把前两位加上80H,后位后加上80H,然后就是一个汉字了。

建议你可看看汉字编码原码方面的资料看看。

Kevin_qing 2001-06-05
  • 打赏
  • 举报
回复
faint~~~~~~~~`

try this.

char GB[3];

LPCSTR input;//like A1B0;

WORD CvtHex(LPCSTR hex)
{
WORD out=0;

for(int i=0;i<4;i++)
{
out<<=4;
if(hex[i]>'F')
{
hex[i]-='a';
}
if(hex[i]>'0')
{
hex[i]-='A';
}
out!=hex;

}

}

WORD o=CvtHex(input);
GB[0]=o;
GB[1]=o>>8;
GB[2]=0;

printf("%s\n",GB);
liuto 2001-06-03
  • 打赏
  • 举报
回复
赫赫,他说的这个GB码不知道是什么,5E3A1?5E3A?这是什么码?我记得GB码是> A0...的.
bgxy 2001-06-03
  • 打赏
  • 举报
回复
其实这个程序是用在日语环境的。
5E3A1仅仅是一个比喻,不一定真的是GB码。
duz 2001-06-03
  • 打赏
  • 举报
回复
不知道你所为的16进制国标码是什么东东,国标码应该是有区码和位码组成,
其中都各自加上0xA0,就组成计算机的内码了。
如啊字区码为16,位码为1,其计算机内部的表示即0xA1B0了
而且对于计算机来说没有任何进制的问题,不同的进制使用来给人看的。
shan_ghost 2001-06-02
  • 打赏
  • 举报
回复
shan_ghost 2001-06-02
  • 打赏
  • 举报
回复
不至于吧!
  以十六进制读入GB码;在汉字系统环境下直接将它
作为字符写出即可.(C语言环境下)

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧