gpt4 book ai didi

crc - 将 CRC32 值减少为 16 或 8 位

转载 作者:行者123 更新时间:2023-12-04 16:51:48 24 4
gpt4 key购买 nike

在消息框架方案中,我想通过 CRC 错误检测来保护数据包。这些数据包通过 TCP 连接发送。

对于长度小于 16 字节的小数据包,我会选择 CRC8。对于小于 4096 字节的数据包,使用 CRC16 算法。对于较大的数据包,CRC32 算法。

目前最具吸引力的 CRC 实现是 CRC32C,因为它具有硬件支持(至少在某些 Intel CPU 上)。但对于 8 位和 16 位 CRC 没有特殊说明。

我现在的问题是:与原生 CRC16 或 CRC8 算法相比,是否可以将 CRC32C 算法的 32 位值减少到 16 位或 8 位值,而不损害错误检测性能?

一个例子:

char buffer[256];
...
uint32_t crc32 = compute_crc32c_of_block( buffer, 256 );
uint16_t fake_crc16 = ( crc32 >> 16 ) ^ crc32;
uint8_t fake_crc8 = ( fake_crc16 >> 8 ) ^ fake_crc16;

fake_crc8 和真正的 CRC8 实现一样好吗?

提前致谢。

最佳答案

32 位 CRC 的低 8 位的纠错性能不如 8 位 CRC,例如检测突发错误的保证。然而,它可能足以满足您的应用需求,具体取决于噪声源的特性。如果您有大量位错误且它们的位置相关,那么您应该使用真正的 CRC。如果您有罕见的位翻转或大量严重错误,那么 CRC 的一部分可能同样有效。

没有什么可以替代测试以了解它们的性能。

关于crc - 将 CRC32 值减少为 16 或 8 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22343913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com