Zlib Ruby和Python库中的CRC32校验和是不同的

时间:2018-06-17 14:02:32

标签: python ruby zlib crc crc32

我试图在Ruby和Python中为相同的字符串生成CRC32校验和,并得到不同的结果。

的Python

from zlib import crc32
x = "SheetJS"
crc32(x)
#=> -1647298270

的NodeJS

var CRC32 = require('crc-32');
var x = "SheetJS";
CRC32.str(x); 
#=> -1647298270

红宝石

require 'zlib'
x = "SheetJS"
Zlib::crc32(x)
#=> 2647669026

1 个答案:

答案 0 :(得分:4)

这些是相同的值,区别在于解释。 Python和NodeJS将crc32解释为带符号的数字,Ruby - 作为无符号。看看:

In [1]: import struct

In [2]: struct.unpack('i', struct.pack('I', 2647669026))
Out[2]: (-1647298270,)

我们将2647669026转换为无符号整数的字节,然后将其作为有符号整数读取。