我有代码,必须将0x3B9ACA02432543更改为某个值,以使此代码的结果等于校验和结果.
我try 将其更改为检验和默认值0x04C11DB7,但结果值不同
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc != 2) {
fprintf(stderr, "usage: %s <file>\n", argv[0]);
exit(EXIT_FAILURE);
} else {
FILE *f = NULL;
int c;
f = fopen(argv[1], "rb");
if (f == NULL)
perror("fopen()");
else {
int size = 0;
int crc;
int c;
int i, j;
int crc_table[256];
for (i = 0; i < 256; i++) {
crc = i;
for (j = 0; j < 8; j++)
crc = crc & 1 ? (crc >> 1) ^ 0x3B9ACA02432543 : crc >> 1;
crc_table[i] = crc;
}
crc = 0;
while ((c = fgetc(f)) != EOF) {
++size;
crc = crc_table[(crc ^ c) & 0xFF] ^ (crc >> 8);
}
crc ^= 0xFFFFFFFFUL;
printf("%u\n", crc);
}
}
return 0;
}