Training, Open Source computer languages
PerlPHPPythonMySQLApache / TomcatTclRubyJavaC and C++LinuxCSS 
Search for:
Home Accessibility Courses Diary The Mouth Forum Resources Site Map About Us Contact
This week, we're updating our course layouts and descriptions. Presentation and materials always gently change over time, but just occasionally there's a need to make a step change to clear out some of the old and roll in the new. That's now happening - but over a long and complex site it's not instant and you'll see sections of the site changing up to and including 19th September.

See also [here] for status update
crc16 calculation

Posted by clubnet (clubnet), 4 November 2008
I am currently trying to get the crc16 of a hex string in tcl ,

the hex string is as follows 0x00 0x01 0x11 0xFF and then send it to a serial interface

How do i do this in tcl using polynomial 0x8005

The resulting crc checksum should be in two bytes and the result for the above string is 0xE4 and 0x15 which was calculated in C

The c code is as follows can I do the same in tcl

#define CRC16_POLY          0x8005
#define CRC_INIT     0x0

INT16U culCalcCRC(INT8U crcData, INT16U crcReg)
   INT8U i;

   for (i = 0; i < 8; i++) {
       if (((crcReg & 0x8000) >> ^ (crcData & 0x80))
           crcReg = (crcReg << 1) ^ CRC16_POLY;
           crcReg = (crcReg << 1);

       crcData <<= 1;
   return crcReg;

INT16U GenCRC(INT8U *p, INT8U n)
INT8U i;
INT16U checksum = CRC_INIT;  

for(i = 0; i < n; i++)
 checksum = culCalcCRC(*p++, checksum);
       //need to change
       checksum=(checksum<< + i;
return checksum;

This page is a thread posted to the opentalk forum at and archived here for reference. To jump to the archive index please follow this link.

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2014: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: • WEB: • SKYPE: wellho