本帖最后由 udnui 于 2013-12-06 15:36:27 编辑

解决方案 »

  1.   

    不懂java,试着翻译了一下,执行结果也是 2f7a,就当是翻译对了吧type
      CRC16Text = class
        class function getCRC(str: AnsiString): AnsiString;
      end;
    ......class function CRC16Text.getCRC(str: AnsiString): AnsiString;
    var
      tmp: AnsiString;
      bytes: array of Byte;
      i, j, crc, polynomial, sLen: Integer;
      bit, c15: Boolean;
    begin
      Result := '';
      tmp := '';
      crc := $FFFF;
      polynomial := $1021;  sLen := Length(str);
      SetLength(bytes, sLen div 2);  for i := 0 to sLen - 1 do
      begin
        if (i mod 2 = 0) then
        begin
          tmp := Copy(str, 1 + i, 2);
          Assert(tmp <> '', 'tmp 变量为空字符。');
          bytes[i div 2] := StrToInt('$' + tmp);
        end;
      end;  for i := Low(bytes) to High(bytes) do
      begin
        for j := 0 to 7 do
        begin
          bit := (bytes[i] shr (7 - j) and 1) = 1;
          c15 := (crc shr 15 and 1) = 1;
          crc := crc shl 1;
          if (c15 xor bit) then
            crc := crc xor polynomial;
        end;
      end;
      crc := crc and $FFFF;
      Result := IntToHex(crc, 4);
    end;
      

  2.   


    // 调用
    var
      abc: AnsiString;
    begin
      abc :=
        CRC16Text.getCRC('5B0000001F0001EC38100205BDB344010000010000117B86DEE2DD37A8035D');
      ShowMessage(abc); //结果为2f7a
    end;
      

  3.   

    果真对了,非常感谢sololie,谢谢