//генерация CRC. buf - буфер с сообщением, Num - количество байтstatic WORD MakeCRC16(const WORD wPolynom_in,const BYTE* buf,const DWORD dwdNum){ DWORD dwd=0; DWORD dwdPolynom16=(((DWORD)wPolynom_in)<<8); DWORD dwdCurr; BYTE by; dwd=((buf[0]<<16) | (buf[1]<<8)); for(dwdCurr=2;dwdCurr<dwdNum;dwdCurr++) { dwd|= buf[dwdCurr]; for(by=8;by;by--) { if((dwd<<=1)&0x01000000) { dwd^=dwdPolynom16; } } } for(by=16;by;by--) { if((dwd<<=1)&0x01000000) { dwd^=dwdPolynom16; } } return *((WORD*)(((BYTE*)&dwd)+1));}