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
For 2021 - online Python 3 training - see ((here)).

Our plans were to retire in summer 2020 and see the world, but Coronavirus has lead us into a lot of lockdown programming in Python 3 and PHP 7.
We can now offer tailored online training - small groups, real tutors - works really well for groups of 4 to 14 delegates. Anywhere in the world; course language English.

Please ask about private 'maintenance' training for Python 2, Tcl, Perl, PHP, Lua, etc.
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., 2022: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 793803 • EMAIL: • WEB: • SKYPE: wellho