大侠,不得已请教大家,我实在是搞不出来了。查了很多网站一直没算出这个一组数据的CRC算法。ff ff fd ff ff 10 01 08 d3 0b 3c 05 a6 00 00 00 0a 00 04 00 08 00 09 ae 8a
ff ff fd ff ff 10 01 08 ce 0b 61 05 6b 00 00 00 0a 00 05 00 08 00 0a 40 a9 
ff ff fd ff ff 10 01 08 f0 0b 71 06 0a 00 00 00 0a 00 05 00 08 00 09 08 b3 
ff ff fd ff ff 10 01 08 c5 0b 69 05 7f 00 00 00 0a 00 05 00 09 00 09 f9 eb这里有4组数据,前23个数是传输的数据,后两位是CRC校验码。请问,这个可以反推出CRC算法么?谢谢了。

解决方案 »

  1.   


    谢谢你,这个多少组数据我都可以提供,只要能反推出来就好了,老外的设备发的数据,应该用的是标准的CRC吧
      

  2.   

    我平时用的有CRC16和CRC32算法啊,两种实现的方法都可以在google找到啊
      

  3.   

    这个要看看别人采用的是什么方法校验,CRC算法一样,但表不一样,算出的结果肯定不一样。
      

  4.   


    //我用的一个crc,供参考!
    function TCommunicationProtocol.CRC16(buf: array of Byte;len: Integer): Word;
    var
      i,j: Integer;
      chr: Word;
    begin
      Result := $ffff;  for j:=0 to len - 1 do begin
        chr := buf[j] and $ff;
        Result := Result xor chr;
        for i:=0 to 8 -1 do begin
          if ((Result and 01) <> 0) then
            Result := (Result shr 1) xor $a001
          else
            Result := Result shr 1;
        end;
        Result := Result and $ffff;
      end;
      Result := Result shr 8 + (Result and $FF shl 8)
    end;