以下是一级简码汉字拼音对照表,第一个数字为区号减0xb0,第二个数字为位号减0xa1。每行表示一个拼音首字母在一级简码中的起始区号位号,一级简码是按拼单排序的。比如:“张”字的内码为0xd5, 0xc5,分别减去0xb0、0xa1后等于37,36,查下表可得出在z之后。再如:“王”字的内码为0xcd, 0xf5,分别减去0xb0、0xa1后等于29,84,查下表正好在w和x之间。
二级简码是按笔划排序的,只能通过逐个建立拼音对照表来查找,不过二级简级很少用。00-00: a
00-36: b
02-32: c
04-78: d
06-73: e
07-01: f
08-32: g
09-93: h
i
11-86: j
15-05: k
16-11: l
18-71: m
20-34: n
21-21: o
21-29: p
22-57: q
24-26: r
24-85: s
27-90: t
u
v
29-57: w
30-83: x
33-24: y
36-48: z
// 以下生成全部汉字的VC程序,从产生出来的hz.txt中可以分析出上表CFile f;
f.Open("c:\hz.txt", CFile::modeCreate | CFile::modeWrite);
char buff[1000];
for ( int i = 0 ; i < (0xff - 0xb0) ; i++ )
{
  memset((void*)buff, 0, 1000);
  int k = 0;
  for ( ; ; )
  {
    if ( k >= 94 ) break;
    int k1 = k;
    for ( int j = 0 ; j <= 16 ; j++, k++ )
    {
      buff[j*2] = i+0xb0;
      buff[j*2+1] = k + 0xa1;
    }
    CString strLine;
    strLine.Format("%02d-%02d: %s\x0d\x0a", i, k1, buff);
    f.Write((void*)LPCTSTR(strLine), strLine.GetLength());
  }
}
f.Close();

解决方案 »

  1.   

    对于这个问题,我想请人仔细的钻研一下。因为我注意到一件事情:在系统界面里(如控制面板),如果排列方式为自动排列,则以汉字为首的条目会以拼音顺序排列,可见 Windows 系统已经能够以某种方式实现根据汉字来得到其拼音。
      

  2.   

    GB汉字内码(一级简码)本身就是按拼音顺序排列的,按内码排序自然就是按拼音排序,windows系统并不需要先求得汉字的拼音才能按拼音顺序排序。
      

  3.   

    使用这个函数就可以得到(输入汉字,返回字母)
    function tform1.pingyin(const ch:string):char;
    var quwei:integer;r:char;
    begin
    quwei:=(ord(ch[1])-176)*256+ord(ch[2])-161;
    case quwei of
     0..35:r:='a';
     36..543:r:='b';
     544..1101:r:='c';
     1102..1608:r:='d';
     1609..1792:r:='e';
     1793..2079:r:='f';
     2080..2396:r:='g';
     2397..2901:r:='h';
     2902..3844:r:='j';
     3845..4106:r:='k';
     4107..4678:r:='l';
     4679..5153:r:='m';
     5154..5396:r:='n';
     5397..5404:r:='o';
     5405..5688:r:='p';
     5689..6169:r:='q';
     6170..6228:r:='r';
     6229..7001:r:='s';
     7002..7480:r:='t';
     7481..7762:r:='w';
     7763..8471:r:='x';
     8472..9263:r:='y';
     else r:='z';
    end;
    result:=r;
    end;
      

  4.   

    真对不起,有这么多人给我答案,我只好食言了。 给softsprite和friendkey 各50分吧。 谢谢所有给我答案的大侠。