CRC16 - Polynom 0x8005
Relevant links:
http://www.summitinstruments.com/knowledge_center/pdf/TN410.pdf
http://www.lammertbies.nl/comm/info/crc-calculation.html?crc=1234567898765421&method=ascii
$SAMPLECODE$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 * The code below seems to produce correct result but it hasn't been tested thoroughly. * Polynom = 0x8005 #DEFINE CRC16 0xA001 * Build CRC table DIMENSION laCrc[256] FOR i=0 TO 255 lnData = i lnCrc = 0 FOR j=0 TO 7 IF BITAND(BITXOR(lnData, lnCrc),1) > 0 lnCrc = BITXOR(BITRSHIFT(lnCrc,1), CRC16) ELSE lnCrc = BITRSHIFT(lnCrc,1) ENDIF lnData = BITRSHIFT(lnData,1) ENDFOR *? i, TRANSFORM(lnCrc, "@0") laCrc[i+1] = lnCrc ENDFOR * Calculate CRC16 lcStr = "1234567898765421" lnCrc = 0 FOR i=1 TO LEN(lcStr) lnByte = ASC(SUBSTR(lcStr,i,1)) lnCrc = BITXOR( BITRSHIFT(lnCrc,8), ; laCrc[BITXOR(BITAND(lnCrc, 0xFF), lnByte)+1]) ENDFOR ? TRANSFORM(lnCrc, "@0")
Comments