首页 > 解决方案 > Zlib Ruby 和 Python 库中的 CRC32 校验和不同

问题描述

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

Python

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

标签: pythonrubyzlibcrccrc32

解决方案


这些是相同的值,不同之处在于解释。Python 和 NodeJS 将 crc32 解释为有符号数,而 Ruby - 解释为无符号数。看一看:

In [1]: import struct

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

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


推荐阅读