我试图用Ruby和Python为同一个字符串生成CRC32校验和,得到不同的结果。
蟒蛇

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

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

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

最佳答案

这些都是相同的值,不同的是在解释上python和nodejs将crc32解释为有符号数,ruby解释为无符号数。看一看:

In [1]: import struct

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

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

关于python - Zlib Ruby和Python库中的CRC32校验和不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50897392/

10-13 07:09