#include "paulcommoncrc.h" PaulCommonCRC::PaulCommonCRC(QObject *parent) : QObject(parent) { initLookUpTableForCRC(); } void PaulCommonCRC::initLookUpTableForCRC( void ) { unsigned int i; unsigned int tmp; for (i=0; i<256; i++) { tmp = 0; if((i & 1) != 0) { tmp = tmp ^ 0x1021; } if((i & 2) != 0) { tmp = tmp ^ 0x2042; } if((i & 4) != 0) { tmp = tmp ^ 0x4084; } if((i & 8) != 0) { tmp = tmp ^ 0x8108; } if((i & 16) != 0) { tmp = tmp ^ 0x1231; } if((i & 32) != 0) { tmp = tmp ^ 0x2462; } if((i & 64) != 0) { tmp = tmp ^ 0x48c4; } if((i & 128) != 0) { tmp = tmp ^ 0x9188; } lookUpTableForCRC[i] = tmp; } } void PaulCommonCRC::GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData) { unsigned int Chk; unsigned int j; Chk = 0xffff; // reset the syndrom to all ones for (j=0; j> 8); crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff); } unsigned int PaulCommonCRC::Crc_opt( unsigned char D, unsigned int Chk) { return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]); }