首页 > 解决方案 > 在 Python 中计算浮点数数组的 crc32 校验和

问题描述

我正在尝试在 Python 中计算浮点数数组的 crc32 校验和,然后将其与 C++ 中计算的 crc32 校验和进行比较,对于单个浮点数,我正在使用以下代码:

crc =binascii.crc32(binascii.a2b_hex(float_to_hex(386.18758683282005)[2:]))

def float_to_hex(f):
    return hex(struct.unpack('<I', struct.pack('<f', f))[0])

这给出597302619了和我在 C++ 中得到的相同的校验和。但我还需要计算 Python 中浮点数组的 crc32 校验和。

代码应该如何获取数组的 crc32 校验和?我尝试添加每个浮点数的校验和,但这给出了错误的校验和

标签: pythonc++crc32

解决方案


只需对每个数字重复,使用最后一个 CRC 作为 next 的第二个参数crc32()。所以像:

crc = binascii.crc32(firststring)
crc = binascii.crc32(nextstring, crc)
...
crc = binascii.crc32(laststring, crc)

鉴于评论中的示例数组,我在交互式 Python 3 中得到了这个:

>>> import binascii
>>> import struct
>>> c = 0
>>> for x in a:
...     c = binascii.crc32(binascii.a2b_hex(float_to_hex(x)[2:]), c)
... 
>>> c
702039990

如果这些浮点数以大端顺序存储在内存中,这将是您将该浮点数组的 CRC-32 作为字节序列获得的结果。


推荐阅读