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

伊利亚·切列夫科夫(Ilya Cherevkov)

我正在尝试在Ruby和Python中为同一字符串生成CRC32校验和并获得不同的结果。

蟒蛇

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

节点JS

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,)

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章