试一下吧,不知行不行。
function DecodeChinese(InputStr:string):string;
var
    Buf:Array[0..299] of WideChar;
    i:integer;
begin
    While(i<Length(InputStr)-1) do
    begin
        Buf[round(i/4)]:=WideChar(StrToInt('0x'+Copy(InputStr,i+1,4)));
        inc(i,4);
    end;
    Buf[round(Length(InputStr)/4)]:=WideChar(0);
    Result:=WideCharToString(Buf);
end;

解决方案 »

  1.   

    由于我不知道你算法的含义,
    胡乱的翻译了一把
    仅供参考
    敬请高人指点
    function DecodeChinese(InputStr: String): String;
    var
      Buf: array[0..299] of WideChar;
      i : Integer;
      iLen : Integer;
    begin
      iLen := Length(InputStr);
      i := 1;
      while i < iLen + 1 do
      begin
        Buf[i div 4] := WideChar(Chr(StrToInt('$' + Copy(InputStr, i, 4))));
        i := i + 4;
      end;
      Buf[iLen + 1] := #0;
      Result := WideCharToString(Buf);
    end;如果不对,给出一个可以测试的例子,我在改
      

  2.   

    大概能看懂,定义一个buffer,然后开始一个循环,步长为4。
    然后把输入字符串的每4个字符加上‘0X’,并转换成整数写入buffer中,
    Buf[InputStr.Length()/4]=0;这一句不懂,然后WideCharToString返回结果
      

  3.   

    function DecodeChinese(InputStr:String):WideString;
    var
      buf: array [0..299] of WideChar;
      P,TempP:PWideChar;
      i:Integer;
      L:Integer;
    begin
      L:=Length(InputStr);
      i:=0;
      while i< L do
      begin
        P:=@Buf[i div 4];
        P:=StringToWideChar(IntToStr(StrToInt('$'+copy(InputStr,i+1,4))),TempP,4);
        i:=i+4;
      end;
      Buf[L div 4]:='0';
      P:=Buf;
      result:= P;
    end;
      

  4.   

    各位的方法我都试了一下,从语法上都能编译过去,只是得不到正确结果
    这个函数是用来进行编码变换,大体过程跟cobi说的差不多,
    我也不太清楚具体的算法,所以请大家看看根据这段CB程序,能不能找到什么规律
    下面是它的反算函数,即将GB2312的中文编码的函数转化为CP936的Unicode编码,
    希望对大家能有帮助
    function EncodeChinese(var s:WideString):String;
    var
    i,len:Integer;
    cur:Integer;
    t:String;
    begin
    Result:='';
    len:=Length(s);
    i:=1;
    while i<=len do
    begin
    cur:=ord(s[i]);
    //BCD转换
    FmtStr(t,'%4.4x',[cur]);
    Result:=Result+t;
    inc(i);
    end;
    end;
      

  5.   

    两个函数所完成的功能如下DecodeChinese:621172314E2D56FD-〉我爱中国EncodeChinese:我爱中国->621172314E2D56FD621172314E2D56FD为Unicode编码
      

  6.   

    function DecodeChinese(InputStr:string):string;
    var
        i:integer;
    begin
        Result := '';
        While(i<Length(InputStr)-1) do
        begin
            Result := Result + 
                   WideCharToString(WideChar(StrToInt('$'+Copy(InputStr,i+1,4))));
            inc(i,4);
        end;
    end;
      

  7.   

    我参照各位的写法,重新调试了一下,通过了
    现在写出来与各位共享。
    函数如下
    function DecodeChinese(InputStr: string): string;
    var
    Buf:Array[0..299] of WideChar;
    i:integer;
    begin
       i:=0 ;
            while(i<Length(InputStr))do
            begin
            Buf[(i div 4)]:=WideChar(StrToInt('0x'+Copy(InputStr,i+1,4)));
            inc(i,4);
            end;
            Buf[Length(InputStr)div 4]:=WideChar(0);
            result:=WideCharToString(Buf);
    end;该函数可能还不太强健,仅供参考。我现在正在做中文短信息方面的东西,
    如果有同行的朋友,可以留下联系方法,大家交流:
    我的信箱: [email protected]
      

  8.   

    我参照各位的写法,重新调试了一下,通过了
    现在写出来与各位共享。
    函数如下
    function DecodeChinese(InputStr: string): string;
    var
    Buf:Array[0..299] of WideChar;
    i:integer;
    begin
       i:=0 ;
            while(i<Length(InputStr))do
            begin
            Buf[(i div 4)]:=WideChar(StrToInt('0x'+Copy(InputStr,i+1,4)));
            inc(i,4);
            end;
            Buf[Length(InputStr)div 4]:=WideChar(0);
            result:=WideCharToString(Buf);
    end;该函数可能还不太强健,仅供参考。我现在正在做中文短信息方面的东西,
    如果有同行或感兴趣的朋友,可以留下联系方法,大家交流:
    我的信箱: [email protected]