+ -
当前位置:首页 → 问答吧 → 求使用Python编写的CRC检验码函数

求使用Python编写的CRC检验码函数

时间:2011-03-30

来源:互联网

参考的C语言的CRC函数,生成特定的CRC检验码,现在需要使用Python实现一样的功能,求使用Python编写的函数代码,非常感谢!

u16 crc(u8 *array , u8  num ,u8 n)
{
  u8  i,j;
  u8  CL;
  u8  CH;
  u8  CRC16Lo;
  u8  CRC16Hi;
  u8  UseHi;
  u8  UseLo;
  u16 CRC;
  CRC16Lo =0xFF;
  CRC16Hi =0xFF;
  CL =0x01;
  CH =0xA0;

  for(i=0;i<num;i++)
    {
         CRC16Lo = CRC16Lo^array[n+i] ;
         for(j=0;j<8;j++)
         {
         UseHi = CRC16Hi;
         UseLo = CRC16Lo;

         CRC16Hi = CRC16Hi>>1;
         CRC16Lo = CRC16Lo>>1;

         if((UseHi&0x01)==0x01)
             CRC16Lo = CRC16Lo|0x80;
         if((UseLo&0x01)==0x01)
               {
               CRC16Hi = CRC16Hi^CH;
               CRC16Lo = CRC16Lo^CL;
               }
           }
     }

    CRC=CRC16Hi*256+CRC16Lo;
    return  (CRC);

作者: zqsq   发布时间: 2011-03-30

已经实现功能了,谢谢,提供代码供需要的朋友参考。

  def crc16A(dat):
  crc=0xFFFF #65535
  index=0
  for j in dat:
  crc=crc^j
  print("crc=%x"%crc)
  for i in range(   8  ) :
  if (crc & 1)==1:
  crc =crc >> 1
  crc =crc ^ 0xA001 #40961 多项式
  else:
  crc=crc>>1
  return crc

if __name__ == '__main__':
  import sys
   import binascii
  import datetime
  
  checks_dev2='01 04 13 87 00 31' #01 04 13 87 00 31 85 73
  #将字符串转成HEX数据
  checks_dev2=checks_dev2.replace(' ','')
  checks_dev2bin=binascii.a2b_hex(checks_dev2.encode('ascii'))
   
  ret=crc16A(checks_dev2bin)
  print("hex=%x" %(ret))

作者: zqsq   发布时间: 2011-04-02