Zlib Ruby 和 Python 库中的 CRC32 校验和不同
CRC32 checksums are different in Zlib Ruby and Python libraries
我正在尝试为同一字符串在 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
Ruby
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 转换为无符号整数字节,然后将其作为有符号整数读取。
我正在尝试为同一字符串在 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
Ruby
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 转换为无符号整数字节,然后将其作为有符号整数读取。