Hey thanks,
i finally did get a function working.
i posted it on www.bitsbam.com

i did guess that the puchMsg++ ment that it was iterating through the bytes
of an array.
And Kent and Alan helped me get through the other parts.

I am glad for all this help, because this is an issue that comes up
increasingly often.
so i am also glad for the email archiving by gmail. he he

thanks all,
shawn


On 7/8/07, Tiger12506 <[EMAIL PROTECTED]> wrote:


>> i have a c function from some modbus documentation that i need to
>> translate into python.

>> unsigned short CRC16(puchMsg, usDataLen)
>> unsigned char *puchMsg ;
>> unsigned short usDataLen ;
>> {
>>     unsigned char uchCRCHi = 0xFF ;
>>     unsigned char uchCRCLo = 0xFF ;
>>     unsigned uIndex ;
>>     while (usDataLen––)
>>         {
>>         uIndex = uchCRCHi ^ *puchMsgg++ ;
>>         uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex} ;
>>         uchCRCLo = auchCRCLo[uIndex] ;
>>         }
>>     return (uchCRCHi << 8 | uchCRCLo) ;
>> }

I found this link which may provide some insight into what's going on
here.
(google "modbus CRC16")

http://www.modbustools.com/modbus_crc16.htm

This proves to me that auchCRCHi is a lookup table that you do not have
access to. Happily :-) that link provides the table.

Hmmm... let's see, the difficult C stuff... *puchMsgg++ means to return
the
current character in a string, and then increment the pointer, so that
when
the C code encounters *puchMsgg++ again it reads the next character,
increments, etc. You can emulate this with an index and array notation in
python.

^ ,  <<   , and | are all bitwise operators, and python uses all of these
in the same way as C

'^' means XOR exclusive OR.
0101 ^ 0011 = 0110    i.e.  5 ^ 3 = 6

'<< ' means left - shift
0010 << 2 = 1000  i.e. a << b = a * (2**b)

'|' means OR.
0101 ^ 0011 = 0111   i.e. 5 ^ 3 = 7

puchMsgg   is basically a string
and all the unsigned stuff are (very roughly) integers.

HTH,
Jacob S.

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to