Контрольные суммы CRC32 различаются в библиотеках Zlib Ruby и Python

1

Я пытаюсь создать контрольные суммы CRC32 в Ruby и Python для одной и той же строки и получить разные результаты.

питон

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

NodeJS

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

Рубин

require 'zlib'
x = "SheetJS"
Zlib::crc32(x)
#=> 2647669026
Теги:
crc
zlib
crc32

1 ответ

4
Лучший ответ

Это те же самые значения, разница в интерпретации. Python и NodeJS интерпретируют crc32 как подписанное число, Ruby - как unsigned. Взглянуть:

In [1]: import struct

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

Мы преобразуем 2647669026 в байты как целое без знака, а затем читаем его как подписанное.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню