各位大神。请问这段C++代码翻译成Delphi 是什么?
void CommentAsc(char *soustr, short len, unsigned char *desstr)
{
    int i, ch;
    char tmpstr[53248]={0};    sprintf(tmpstr, "%*.*s",len,len,soustr);
    for( i=0;i<(len+1)/2;i++)
    {
        sscanf( tmpstr+i*2, "%02X", &ch);
        desstr[i] = ch & 0xFF;
    }
    desstr[i] = '\0';
}

解决方案 »

  1.   

    procedure TForm1.CommentAsc(soustr:string;len:Integer;var desstr:string);
    var
      i : Integer;
      ch, tmpstr, FormatStr: string;
      result: array of Char;
      aChar: Char;
    begin
      //在”%m.ns”中,m 表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印)
      //,n 才表示从相应的字符串中最多取用的字符数。
      SetLength(result,(len+1) div 2 + 1);
      FormatStr:= '%'+inttostr(len)+'.'+inttostr(len)+'s';
      tmpstr := Format(FormatStr ,[soustr]);
      I := 0;
      while i<(len+1)/2 do
      begin
        ch := format('%.2x',[StrToIntDef(tmpstr,0)+i*2]);
        aChar := char(StrToIntDef('$'+ch,0));
        result[I] := aChar;
        I:=I+1;
      end;
      desstr:=string(result);
    end;
      

  2.   

    1. 没tform1什么事,这是全局函数
    2. StrToIntDef(tmpstr,0)+i*2 这个明显对C代码理解错了
    3. 如果原样翻译的话,char *应该用PAnsiChar,如果用string的话,short len这个参数可以不要了
    4. 代码很臃肿