taoyx.log co"> Python CRC32 文件校验 - 11GX
首页 > Python CRC32 文件校验

Python CRC32 文件校验

 

binascii.crc32(s [,crc])
返回CRC32校验。参数'crc'指定初始值用于循环。例如:

 

ContractedBlock.gifExpandedBlockStart.gifCode

>>> import binascii

>>> crc = binascii.crc32('spam')

>>> binascii.crc32(' and eggs', crc)

739139840

>>> binascii.crc32('spam and eggs')

739139840

 

 

ContractedBlock.gifExpandedBlockStart.gifCode

import binascii 



def getFileCRC(_path): 

    
try

        blocksize 
= 1024 * 64 

        f 
= open(_path,"rb"

        str 
= f.read(blocksize) 

        crc 
= 0 

        
while(len(str) != 0): 

            crc 
= binascii.crc32(str, crc) 

            str 
= f.read(blocksize) 

        f.close() 

    
except

        
print 'get file crc error!' 

        
return 0 

    
return crc  

 

 

ContractedBlock.gifExpandedBlockStart.gifCode

python 2.X的crc32實作上跟一般的C實作上在整數有號無號的處理上略有不同, 所以使用python 2.X與一般C實作算出的crc32(如sfv)比對時,通常需要特別的方法,



這邊列出一個透過zlib.crc32快速得到所需要結果的方法:





import zlib



def crc32(st):

    crc 
= zlib.crc32(st)

    
if crc > 0:

      
return "%x" % (crc)

    
else:

      
return "%x" % (~crc ^ 0xffffffff)



ex1 
= "12345"

ex2 
= "1kcaseztsa12345azy"



print "%x" % zlib.crc32(ex1)

print crc32(ex1)

print "%x" % zlib.crc32(ex2)

print crc32(ex2)





或如果你有ctypes的話:

import zlib

import ctypes



def crc32_c(st):

    
return "%x" % ctypes.c_uint32(zlib.crc32(st)).value



ex1 
= "12345"

ex2 
= "1kcaseztsa12345azy"



print "%x" % zlib.crc32(ex1)

print crc32_c(ex1)

print "%x" % zlib.crc32(ex2)

print crc32_c(ex2)







註: python 
3.0以上沒有這個問題.

 

 

ContractedBlock.gifExpandedBlockStart.gifCode

from ctypes import * 

import binascii 



def getFileCRC(_path): 

try

blocksize 
= 1024 * 64 

= open(_path,"rb"

str 
= f.read(blocksize) 

crc 
= 0 

while(len(str) != 0): 

crc 
= binascii.crc32(str, crc) 

str 
= f.read(blocksize) 

f.close() 

except

klog.error(
"get file crc error!"

return 0 

return c_uint(crc).value

 

 

转载于:https://www.cnblogs.com/leavingme/archive/2009/06/14/1503120.html

更多相关:

  • #coding:utf-8'''Created on 2017年10月25日@author: li.liu'''import pymysqldb=pymysql.connect('localhost','root','root','test',charset='utf8')m=db.cursor()'''try:#a=raw_inpu...

  • python数据类型:int、string、float、boolean 可变变量:list 不可变变量:string、元组tuple 1.list list就是列表、array、数组 列表根据下标(0123)取值,下标也叫索引、角标、编号 new_stus =['刘德华','刘嘉玲','孙俪','范冰冰'] 最前面一个元素下标是0,最...

  • from pathlib import Path srcPath = Path(‘../src/‘) [x for x in srcPath.iterdir() if srcPath.is_dir()] 列出指定目录及子目录下的所有文件 from pathlib import Path srcPath = Path(‘../tenso...

  • 我在使用OpenResty编写lua代码时,需要使用到lua的正则表达式,其中pattern是这样的, --热水器设置时间 local s = '12:33' local pattern = "(20|21|22|23|[01][0-9]):([0-5][0-9])" local matched = string.match(s, "...

  • 在分析ats的访问日志时,我经常会遇到将一些特殊字段对齐显示的需求,网上调研了一下,发现使用column -t就可以轻松搞定,比如 找到ATS的access.log中的200响应时间过长的日志 cat access.log | grep ' 200 ' | awk -F '"' '{print $3}' > taoyx.log co...