要求是二进制CRC16校验,计算多项式为(X16+X15+X2+1)。
比如给的是02 03 00 00 00 03 ,得到的校验码为05F8
小弟我算来算去没算出来,求高人指点

解决方案 »

  1.   

    找一个CRC校验的组件就可以了
      

  2.   

    function TCRC.CRC16(puchMsg: array of byte; usDataLen : word): Word;
    var
      Index:Integer;
      uIndex:word;
      uchCRCHi:byte;
      uchCRCLo:byte;
    begin
      uchCRCHi:=$FF;
      uchCRCLo:=$FF;
      for index:=0 to usDataLen-1 do
      begin
        uIndex:=uchCRCHi xor puchMsg[index];
        uchCRCHi:=uchCRCLo xor auchCRCHi[uIndex];
        uchCRCLo:=auchCRCLo[uIndex];
      end;
      Result:=((uchCRCHi shl 8) or uchCRCLo);
    end;
      

  3.   

    const
      auchCRCHi:array[0..255] of byte=( $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,
                                        $80,$41,$00,$C1,$81,$40,$01,$C0,$80,$41,
                                        $00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,
                                        $80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40,
                                        $00,$C1,$81,$40,$01,$C0,$80,$41,$00,$C1,
                                        $81,$40,$01,$C0,$80,$41,$01,$C0,$80,$41,
                                        $00,$C1,$81,$40,$01,$C0,$80,$41,$00,$C1,
                                        $81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41,
                                        $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,
                                        $80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,
                                        $01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,
                                        $81,$40,$01,$C0,$80,$41,$00,$C1,$81,$40,
                                        $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,
                                        $80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,
                                        $01,$C0,$80,$41,$00,$C1,$81,$40,$01,$C0,
                                        $80,$41,$01,$C0,$80,$41,$00,$C1,$81,$40,
                                        $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,
                                        $80,$41,$00,$C1,$81,$40,$01,$C0,$80,$41,
                                        $00,$C1,$81,$40,$00,$C1,$81,$40,$01,$C0,
                                        $80,$41,$00,$C1,$81,$40,$01,$C0,$80,$41,
                                        $01,$C0,$80,$41,$00,$C1,$81,$40,$01,$C0,
                                        $80,$41,$00,$C1,$81,$40,$00,$C1,$81,$40,
                                        $01,$C0,$80,$41,$01,$C0,$80,$41,$00,$C1,
                                        $81,$40,$00,$C1,$81,$40,$01,$C0,$80,$41,
                                        $00,$C1,$81,$40,$01,$C0,$80,$41,$01,$C0,
                                        $80,$41,$00,$C1,$81,$40
                                      );
                                      
      auchCRCLo:array[0..255] of byte=( $00,$C0,$C1,$01,$C3,$03,$02,$C2,$C6,$06,
                                       $07,$C7,$05,$C5,$C4,$04,$CC,$0C,$0D,$CD,
                                        $0F,$CF,$CE,$0E,$0A,$CA,$CB,$0B,$C9,$09,
                                       $08,$C8,$D8,$18,$19,$D9,$1B,$DB,$DA,$1A,
                                       $1E,$DE,$DF,$1F,$DD,$1D,$1C,$DC,$14,$D4,
                                       $D5,$15,$D7,$17,$16,$D6,$D2,$12,$13,$D3,
                                       $11,$D1,$D0,$10,$F0,$30,$31,$F1,$33,$F3,
                                       $F2,$32,$36,$F6,$F7,$37,$F5,$35,$34,$F4,
                                       $3C,$FC,$FD,$3D,$FF,$3F,$3E,$FE,$FA,$3A,
                                       $3B,$FB,$39,$F9,$F8,$38,$28,$E8,$E9,$29,
                                       $EB,$2B,$2A,$EA,$EE,$2E,$2F,$EF,$2D,$ED,
                                       $EC,$2C,$E4,$24,$25,$E5,$27,$E7,$E6,$26,
                                       $22,$E2,$E3,$23,$E1,$21,$20,$E0,$A0,$60,
                                       $61,$A1,$63,$A3,$A2,$62,$66,$A6,$A7,$67,
                                       $A5,$65,$64,$A4,$6C,$AC,$AD,$6D,$AF,$6F,
                                       $6E,$AE,$AA,$6A,$6B,$AB,$69,$A9,$A8,$68,
                                       $78,$B8,$B9,$79,$BB,$7B,$7A,$BA,$BE,$7E,
                                       $7F,$BF,$7D,$BD,$BC,$7C,$B4,$74,$75,$B5,
                                       $77,$B7,$B6,$76,$72,$B2,$B3,$73,$B1,$71,
                                       $70,$B0,$50,$90,$91,$51,$93,$53,$52,$92,
                                       $96,$56,$57,$97,$55,$95,$94,$54,$9C,$5C,
                                       $5D,$9D,$5F,$9F,$9E,$5E,$5A,$9A,$9B,$5B,
                                       $99,$59,$58,$98,$88,$48,$49,$89,$4B,$8B,
                                       $8A,$4A,$4E,$8E,$8F,$4F,$8D,$4D,$4C,$8C,
                                       $44,$84,$85,$45,$87,$47,$46,$86,$82,$42,
                                       $43,$83,$41,$81,$80,$40
                                        );