简单地将循环中的 256 修改为 65536 只是一遍又一遍地重复相同的 256 值。如何生成65536个不同的值?
#define CRC64_ECMA182_POLY 0x42F0E1EBA9EA3693ULL
static uint64_t crc64_table[256] = {0};
static void generate_crc64_table(void)
{
uint64_t i, j, c, crc;
for (i = 0; i < 256; i++) {
crc = 0;
c = i << 56;
for (j = 0; j < 8; j++) {
if ((crc ^ c) & 0x8000000000000000ULL)
crc = (crc << 1) ^ CRC64_ECMA182_POLY;
else
crc <<= 1;
c <<= 1;
}
crc64_table[i] = crc;
}
}
最佳答案
如果你想要 65536 个值,大概你想要一个 16 位的表,所以将位循环也升级到 16。
static void generate_crc64_table(void)
{
uint64_t i, j, c, crc;
for (i = 0; i < 65536 ; i++) { // 65536 was 256
crc = 0;
c = i << 32; // 32 was 56
for (j = 0; j < 16; j++) { // 16 was 8
if ((crc ^ c) & 0x8000000000000000ULL)
crc = (crc << 1) ^ CRC64_ECMA182_POLY;
else
crc <<= 1;
c <<= 1;
}
crc64_table[i] = crc;
}
}
不能保证这会产生一个有用的表格,但值至少应该是不同的。
关于c - 修改CRC64的哈希表生成65536个值而不是256个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57122893/