【发布时间】:2017-12-08 17:40:37
【问题描述】:
我正在尝试计算 CRC32-C 校验和值。我参考了很多在线 CRC 计算器和很多网站来编写我自己的 crc 校验和计算器。我没有得到预期的结果。根据我的研究,只有“http://crccalc.com/”给出了我的预期值。
我看到有很多带表格的方法,没有表格..等等似乎对我没有用,我正在上传用于计算 crc 的简单方法程序
POLY_LENGTH = 32
def convertobin(input_message):
input_message = bin(input_message[::-1])
return input_message
def find_xor(polynomial, input_message):
# print polynomial
print input_message
xor = polynomial ^ input_message
return xor
def find_crc(polynomial, packet):
print len(packet)
input_messageInBin = bin(int(packet,16))[2:]
print input_messageInBin, type(input_messageInBin)
input_messageInBin = input_messageInBin + '0'*31
inputMessageLength = len(input_messageInBin)
firstTime = 1
remainder = 0
startmarker = 0
control = 1
diff = 0
stopmarker = 0
import pdb; pdb.set_trace()
while control:
if len(input_messageInBin) > (startmarker + 32) :
if firstTime:
inputString = input_messageInBin[0:POLY_LENGTH]
stopmarker = POLY_LENGTH - 1
xor = find_xor(polynomial, int(inputString,2))
xor_bits_length = len(bin(xor)) - 2
remainder = str(bin(xor))[2:]
diff = POLY_LENGTH - xor_bits_length
firstTime = 0
startmarker = startmarker + diff - 1
else:
diff_bits = input_messageInBin[stopmarker+1:stopmarker+diff+1]
inputString = remainder + diff_bits
print "--------------------------------------------------------"
print "Total number of different bits are: ", diff
print "remainder + diff_bits : ", remainder, "+", diff_bits
print "XOR of :"
print inputString
print bin(polynomial)[2:]
xor = find_xor(polynomial, int(inputString,2))
xor_bits_length = len(bin(xor)) - 2
remainder = str(bin(xor))[2:]
print remainder
print "--------------------------------------------------------"
diff = POLY_LENGTH - xor_bits_length
stopmarker = stopmarker + diff
startmarker = startmarker + diff
else:
control = 0
remainder = remainder + input_messageInBin[startmarker:stopmarker]
print stopmarker
print startmarker
return remainder
val = find_crc(0x1EDC6F41, 'FFFFFFFFFFFFFFFFFFFF0F0FB01013F2E8FAF0421208')
print val
我正在努力让它发挥作用。感谢有人对此有解决方案
【问题讨论】:
-
binascii.crc32 是否适合您的目的?