点击(此处)折叠或打开
- def crc(c,g):
- cc = bin(c)[2:]
- gg = bin(g)[2:]
- x = len(gg)
- a=int(cc[:x],2)
-
- while x<len(cc):
- r = a^g
- rr = bin(r)[2:]
- w = len(gg)-len(rr)
- a = int(rr+cc[x:x+w],2)
- x = x+w
- print bin(a)
- if len(bin(a))<len(bin(g)):
- print bin(a),hex(a)
- else:
- print bin(a^g),hex(a^g)
点击(此处)折叠或打开
- #coding:utf-8
- ##http://zhidao.baidu.com/question/266312731.html
- ##CRC码的计算方法是:
- ##1、 预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器;
- ##2、 把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器;
- ##3、 把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查移出位;
- ##4、 如果移出位为0:重复第3步(再次右移一位); 如果移出位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;
- ##5、 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
- ##6、 重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
- ##7、 将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器;
- ##8、 最后得到的CRC寄存器的高、低字节进行交换即为:CRC码。
- ##
- ##
- def crc16(x):
- b = 0xA001
- a = 0xFFFF
- for byte in x:
- a = a^byte
- for i in range(8):
- last = a%2
- a = a>>1
- if last ==1: a = a^b
- aa = '0'*(6-len(hex(a)))+hex(a)[2:]
- ll,hh = int(aa[:2],16),int(aa[2:],16)
- #print hex(hh),hex(ll)
- return [hh,ll]