Im экспериментирует с crc32 в Python и C, но мои результаты не совпадают.C zlib crc32 и Python zlib crc32 не соответствует
C:
#include <stdio.h>
#include <stdlib.h>
#include <zlib.h>
#define NUM_BYTES 9
int
main(void)
{
uint8_t bytes[NUM_BYTES] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
uint32_t crc = crc32(0L, Z_NULL, 0);
for (int i = 0; i < NUM_BYTES; ++i) {
crc = crc32(crc, bytes, 1);
}
printf("CRC32 value is: %" PRIu32 "\n", crc);
}
дает выходной сигнал CRC32 value is: 3136421207
Python
In [1]: import zlib
In [2]: int(zlib.crc32("123456789") + 2**32)
Out[2]: 3421780262
В питоне я добавляю с 2 ** 32, "слепок" беззнаковое междунар.
Что мне здесь не хватает?
[править 1]
Теперь я попытался с
In [8]: crc = 0;
In [9]: for i in xrange(1,10):
...: crc = zlib.crc32(str(i), crc)
...:
In [10]: crc
Out[10]: -873187034
In [11]: crc+2**32
Out[11]: 3421780262
и
int
main(void)
{
uint32_t value = 123456789L;
uint32_t crc = crc32(0L, Z_NULL, 0);
crc = crc32(crc, &value, 4);
printf("CRC32 value is: %" PRIu32 "\n", crc);
}
Еще не тот же самый результат.
Отличный ответ, спасибо. Я был почти там, собрав части из других ответов, но это было золотым. – evading
Спасибо! См. Мое обновление для альтернативного способа обработки неподписанного типа int Python. –