Python—为什么CRC32(np.int64(1))的结果不同于CRC32(np.int32(1))?
Python中的CRC32比较:Python—为什么CRC32(np.int64(1))的结果不同于CRC32(np.int32(1))?,python,numpy,crc32,int64,int32,Python,Numpy,Crc32,Int64,Int32,Python中的CRC32比较: >>> zlib.crc32(np.int64(1)) == zlib.crc32(np.int32(1)) False >>> np.int64(1) == np.int32(1) True >>> zlib.crc32(np.int64(1)) 2844319735 >>> zlib.crc32(np.int32(1)) 2583214201 1的多项式表达式,无论其int64或
>>> zlib.crc32(np.int64(1)) == zlib.crc32(np.int32(1))
False
>>> np.int64(1) == np.int32(1)
True
>>> zlib.crc32(np.int64(1))
2844319735
>>> zlib.crc32(np.int32(1))
2583214201
1的多项式表达式,无论其int64或int32数据类型如何,都应该相同,但它们的CRC32结果不同。
我尝试了除1之外的许多其他数字,但int64和int32结果的CRC32仍然不匹配
如果您能帮助解决这个令人难以置信的困惑问题,我们将不胜感激。cbc32可以处理字节
int32是4字节,1
是01 00
>>> zlib.crc32(np.int64(1)) == zlib.crc32(b''.join([np.int32(1), np.int32(0)]))
True
int64是8字节,1
是01 00
>>> zlib.crc32(np.int64(1)) == zlib.crc32(b''.join([np.int32(1), np.int32(0)]))
True
CRC在字节流上运行,而不是在数字上运行。一个是(可能)做CRC32(1,0,0,0,0,0,0),另一个是做CRC32(1,0,0,0),假设小Endian。我明白了。稍微扭曲一下我的问题,假设我的系统是Big-Endian,那么zlib.crc32(np.int64(1))==zlib.crc32(np.int32(1))将返回True,是否正确?否。crc32对长度敏感。您可以根据需要为其输入任意多个零,并(通常)得到不同的结果,至少在您开始碰撞之前是这样。