我需要一个脚本,该脚本将为 Python 和 C 计算具有相同输出的 crc32。
我现在正在使用 zlib.crc32,但是对于 C 没有这样的库,我们正在根据维基百科自己编写它。但它不会返回相同的值。
这是我们的 C 脚本代码(从 wikipedia 复制,基于 RFC):
unsigned int crc32( unsigned char *message, unsigned int n )
{
//int i, crc;
unsigned int crc;
unsigned int i;
unsigned int byte, c;
const unsigned int g0 = 0xEDB88320, g1 = g0>>1,
g2 = g0>>2, g3 = g0>>3, g4 = g0>>4, g5 = g0>>5,
g6 = (g0>>6)^g0, g7 = ((g0>>6)^g0)>>1;
i = 0;
crc = 0xFFFFFFFF;
//while ((byte = message[i]) != 0)
while( i != n)
{
byte = message[i]; // Get next byte.
// byte = FrmReadByte( i ); // Get next byte.
crc = crc ^ byte;
c = ((crc<<31>>31) & g7) ^ ((crc<<30>>31) & g6) ^
((crc<<29>>31) & g5) ^ ((crc<<28>>31) & g4) ^
((crc<<27>>31) & g3) ^ ((crc<<26>>31) & g2) ^
((crc<<25>>31) & g1) ^ ((crc<<24>>31) & g0);
crc = ((unsigned)crc >> 8) ^ c;
i = i + 1;
}
return ~crc;
}
编辑:
我们只有 4KB 的 ram 内存,程序本身并不存在。通过 crc32 脚本占用 1KB 的内存可能太多了,不适合那里。感谢您指出 C 也存在 ZLIB 库。