python进行crc校验的方法小感

import serial
import re
import time
'''
读卡器操作类:
 
    
'''
class reader():
    baud_rate = 115200
    device_name = ''
    timeout = 1
    ser = None


    @staticmethod
    def opencom(device_name):
        try:
            reader.ser = serial.Serial(reader.device_name,reader.baud_rate,timeout = reader.timeout)
            return True
        except Exception, e:
            return False


    @staticmethod
    def com_detect():
        reader.device_name = '/dev/ttyUSB0'
        if reader.opencom(reader.device_name):
            return True
        else:
            reader.device_name = '/dev/ttyUSB1'
            if reader.opencom(reader.device_name):
                return True 
            else:
                reader.device_name = '/dev/ttyUSB2'
                if reader.opencom(reader.device_name):
                    return True 
                else:
                    reader.device_name = 'COM2'
                    if reader.opencom(reader.device_name):
                        return True 
                    else:
                        return False

    
    @staticmethod
    def _crc1(data = '0001020304050607080900102030405060708090'):
        datalist = re.findall(r'(.{2})',data) 
        crcnum = 0
        for i in datalist:
            try:
                num = int(i,16)
                crcnum = crcnum ^ num
            except Exception, e:
                return 'error of change2int '
        crcstr = format(crcnum,'x')
        return crcstr


    @staticmethod
    def _crc2(data = '0001020304050607080900102030405060708090'):
        num = (len(data)+1)/2 
        crcnum = 0 
        for i in range(num):
            try:
                num = int(data[:2],16)
                crcnum = crcnum ^ num
                data = data[2:]
            except Exception, e:
                return 'error of change2int '
        crcstr = format(crcnum,'x')
        return crcstr


    @staticmethod
    def _crc3(data = '0001020304050607080900102030405060708090'):
        num = (len(data)+1)/2
        datalist = []
        for i in range(num):
            string = data[(0+i*2):(2+i*2)]
            datalist.append(string)
        crcnum = 0 
        for i in datalist:
            try:
                num = int(i,16)
                crcnum = crcnum ^ num
            except Exception, e:
                return 'error of change2int '
        crcstr = format(crcnum,'x')
        return crcstr









if __name__ == '__main__':
    if reader.com_detect():
        a = 0
        for i in range(1000):
            start = time.clock()
            for i in range(100):
                reader._crc1()
            end = time.clock()
            a = a + end - start
        print a


        a = 0
        for i in range(1000):
            start = time.clock()
            for i in range(100):
                reader._crc2()
            end = time.clock()
            a = a + end - start
        print a


        a = 0
        for i in range(1000):
            start = time.clock()
            for i in range(100):
                reader._crc3()
            end = time.clock()
            a = a + end - start
        print a
    else:

        print 'no com found'


输出的时间:crc1:1.76726367849
                        crc2:1.41187894711
                        crc3:1.80825700785

第一种方法快于第三种慢于第二种

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值