Тестирование слегка обновленного алгоритма в Visual FoxPro (мне лень устанавливать C #): CRC16 работает хорошо, но CRC32 дает разные результаты ...
aa = 'bbb'
? aa
? SYS(2007,aa,0,0)
? sys2007(aa,0)
FUNCTION sys2007
LPARAMETERS lcString, lnBitFlag
LOCAL lnBitLen, lnCRC, inLoop, n
lnBitLen = IIF(BITTEST(m.lnBitFlag,0), 0x8005, 0x1021)
lnCRC = 0xffffffff
FOR n = 1 TO LEN(m.lcString)
byteVal = ASC(SUBSTR(m.lcString, m.n, 1))
FOR inLoop = 7 TO 0 STEP -1
testbit = BITTEST(m.lnCRC, 15) AND !BITTEST(byteVal, inLoop) OR ;
!BITTEST(m.lnCRC, 15) AND BITTEST(byteVal, inLoop)
lnCRC = BITLSHIFT(BITAND(m.lnCRC, 0x7fff), 1)
IF testbit
lnCRC = BITXOR(m.lnCRC, m.lnBitLen)
ENDIF
NEXT
NEXT
RETURN m.lnCRc