gpt4 book ai didi

无法在 C 中获得正确的 CRC CCiTT

转载 作者:行者123 更新时间:2023-11-30 14:45:18 27 4
gpt4 key购买 nike

我正在尝试获取 16 位 CRC CCITT FALSE。我正在使用此页面来检查它。

http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

这是我的代码

unsigned int16 crc16_CCITT(unsigned int8 *data, unsigned int16 len)//CRC16 CCITT False
{
unsigned int16 crc = 0xFFFF;

for(unsigned int16 j = len; j > 0; j--)
{
crc ^= *data++;

for(unsigned int8 i = 0; i < 8; i++)
{
if(crc & 1)
{
//crc = (crc >> 1) ^ 0x8401; // 0x8401 is the reflection of 0x1021
crc = (crc >> 1) ^ 0x1021;
}
else
{
crc >>= 1;
}
}
}
return (crc);
}

正如你所看到的,我已经尝试过反射(reflect)多项式,但也没有成功。

我不明白我做错了什么,我已经将此例程与 16 位 ARC CRC 一起使用。(0x8005)并且工作正常。

最佳答案

尝试以另一种方式移动位:

uint16_t crc16_CCITT (unsigned char *ptr, int count)
{
uint16_t crc = 0xffff;
int i = 0;

while (--count >= 0)
{
crc = crc ^ (uint16_t )*ptr++ << 8;
for (i = 0; i < 8; ++i)
{
if (crc & 0x8000)
{
crc = (crc << 1) ^ 0x1021;
}
else
{
crc = crc << 1;
}
}
}
return crc;
}

关于无法在 C 中获得正确的 CRC CCiTT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53158112/

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