假设一个汉字“白”,由于一个汉字有两个字节:
var s : string;
begin
    s :='白';
    WORD(s[1]) shl 8 +WORD(s[2]) 可以计算出一个16进制的值为‘B0D7"
    通过“B0D7” 我可以知道 s 中放置的汉字的拼音是以“B”开头的。
    我想知道拼音以“B”开头的汉字的16进制码的区间是多少(只有16进制码落在这个区间中,就可以说明他的拼音是以“B”开头的)这个区间是怎么算出的呢?
end;
请各位帮忙!!!

解决方案 »

  1.   

    function TForm1.Find(C: Char): string;
    begin
      case c  of
        'A': result:='$B0A1..$B0C4';
        'B': result:='$B0C5..$B2C0';
        'C': result:='$B2C1..$B4ED';
        'D': result:='$B4EE..$B6E9';
        'E': result:='$B6EA..$B7A1';
        'F': result:='$B7A2..$B8C0';
        'G': result:='$B8C1..$B9FD';
        'H': result:='$B9FE..$BBF6';
        'J': result:='$BBF7..$BFA5';
        'K': result:='$BFA6..$C0AB';
        'L': result:='$C0AC..$C2E7';
        'M': result:='$C2E8..$C4C2';
        'N': result:='$C4C3..$C5B5';
        'O': result:='$C5B6..$C5BD';
        'P': result:='$C5BE..$C6D9';
        'Q': result:='$C6DA..$C8BA';
        'R': result:='$C8BB..$C8F5';
        'S': result:='$C8F6..$CBF9';
        'T': result:='$CBFA..$CDD9';
        'W': result:='$CDDA..$CEF3';
        'X': result:='$CEF4..$D188';
        'Y': result:='$D1B9..$D4D0';
        'Z': result:='$D4D1..$D7F9';
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
    begin
      s:=UpperCase(Edit1.Text  )   ;
      Edit2.Text:= Find(s[1]);
    end;
      

  2.   

    首先,谢谢你们的帮助,不过我想知道,每个字母后边的区间是怎么得到的呀?为什么“A”的区间就是'$B0A1..$B0C4',随便问一下,为什么不写成‘B0A1..B0C4',‘$’是什么意思?
      

  3.   

    每个字母后边的区间是怎么得到的呀?为什么“A”的区间就是'$B0A1..$B0C4'???
      

  4.   

    至于为什么“A”的区间就是'$B0A1..$B0C4',因为以A为首拼的汉字的ASCII码在这区间,
    至于为什么用'$B0A1..$B0C4'而不写成‘B0A1..B0C4'是因为十六进制就是这样表示,如因你愿意也可用十进制,如果你仍不愿意你可以用二进制,
    如果你问为什么它的ASCII码是这样
       1、请致电“美国信息互换标准代码”管理员委会;
       2、请仔细阅读计算机原理。
      如果你认为这样都不给分,唉,我只能说这是什么世道。