求使用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);
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))
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28