我想计算文件的CRC并获取输出:E45A12AC。这是我的代码:

#!/usr/bin/env python
import os, sys
import zlib

def crc(fileName):
    fd = open(fileName,"rb")
    content = fd.readlines()
    fd.close()
    for eachLine in content:
        zlib.crc32(eachLine)

for eachFile in sys.argv[1:]:
    crc(eachFile)

这将计算每一行的CRC,但是它的输出(例如-1767935985)不是我想要的。

Hashlib以我想要的方式工作,但是它会计算md5:
import hashlib
m = hashlib.md5()
for line in open('data.txt', 'rb'):
    m.update(line)
print m.hexdigest()

使用zlib.crc32是否可以获得类似的东西?

最佳答案

更加紧凑和优化的代码

def crc(fileName):
    prev = 0
    for eachLine in open(fileName,"rb"):
        prev = zlib.crc32(eachLine, prev)
    return "%X"%(prev & 0xFFFFFFFF)

PS2:由于注释中的建议,不建议使用旧PS-因此将其删除。谢谢你。我不知道如何错过这一点,但确实很棒。

10-08 16:06