免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2556 | 回复: 1
打印 上一主题 下一主题

求使用Python编写的CRC检验码函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-30 10:29 |只看该作者 |倒序浏览
参考的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);

论坛徽章:
0
2 [报告]
发表于 2011-04-02 15:59 |只看该作者
已经实现功能了,谢谢,提供代码供需要的朋友参考。

  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))
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP