python - 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
解决方案
这些是相同的值,不同之处在于解释。Python 和 NodeJS 将 crc32 解释为有符号数,而 Ruby - 解释为无符号数。看一看:
In [1]: import struct
In [2]: struct.unpack('i', struct.pack('I', 2647669026))
Out[2]: (-1647298270,)
我们将 2647669026 转换为无符号整数字节,然后将其作为有符号整数读取。
推荐阅读
- java - 用于多个数据源的 Ingore flyway
- java - 在 com.amazonaws.services.sso.AWSSSOClientBuilder (Java) 中使用 AWSSSOClientBuilder 类失败
- multipartform-data - 我一直在尝试将上传的图片作为附件发送到电子邮件,但无法正常工作。这是我下面的代码
- java - Spring Security coming in the way of Spring Admin
- angular - Angular Routing and Navigating
- python - 如何用python中的字典值替换字符串中的给定索引?
- html - 当我将鼠标悬停在链接上时,CSS下拉菜单不起作用
- python - Create a Numpy array from parts of other arrays in Python
- types - Rust 中的数据类型
- python - 使用正则表达式在“/”之前和之后拆分单词