接收到PDU编码“4F60597D”,通过以下函数解码出现乱码"O`Y}"(原码为:你好),请高手赐教.function DecodePDU(var s:String):string;
var
  i:Integer;
  str:string ;
  len1,len2:integer;
begin
    i:=1;
    str:=s;
    while i < length(str) do
    begin
      len1:=strtoint('$'+str[i]+str[i+1]);
      len2:=strtoint('$'+str[i+2]+str[i+3]);
      result:=result+chr(len1)+chr(len2);
      i:=i+4;
    end;
end;

解决方案 »

  1.   

    function UCS2ToASC(Src:String):String;
    var i:Integer;
        S:String;
        D:WideChar;
        ResultW:WideString;
    begin
      for i:=1 to Round(Length(Src)/4) do  begin
        S:=Copy(Src,(i-1)*4+1,4);
        D:=WideChar(StrToInt('$'+s));  //此处是重点,用delphi提供的widechar可以转换
        ResultW:=ResultW+D;
      end;
      Result:=ResultW;
    end;
      

  2.   

    呵呵,我刚做完用我的电脑控制我的手机的软件(COMM1),顺便给你!
      

  3.   

    function TProtocolDataUnit.UnpackUCS2(UDInfo:string):WideString;
    var
      i,j:Integer;
      CharTotal:Integer;
      CharUnicode:Integer;
    begin
      Result:='';
      try
        CharTotal:=StrToInt('$'+Copy(UDInfo,1,2));
        if CharTotal mod 2<>0 then
          CharTotal:=CharTotal div 2 +1
        else
          CharTotal:=CharTotal div 2;
      except
        Exit;
      end;
      j:=3;
      for i:=1 to CharTotal do
      begin
        try
          CharUnicode:=StrToInt('$'+Copy(UDInfo,j,4));
          Result:=Result+WideChr(CharUnicode);
          Inc(j,4);
        except
          Exit;
        end;
      end;
    end;