gpt4 book ai didi

c++ - CRC-CCITT实现

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:35 32 4
gpt4 key购买 nike

我正在使用以下函数生成 CRC 和,与在线 CRC-CCITT 计算器相比,它似乎没有返回相同的校验和。

此函数专门使用具有 0x8408 多项式且初始 fcs 为 0xFFFF 的 XMODEM CRC 生成。

uint16_t crc16(uint8_t byte, uint16_t fcs)
{
uint8_t bit;

for(bit=0; bit<8; bit++)
{
fcs ^= (byte & 0x01);
fcs = (fcs & 0x01) ? (fcs >> 1) ^ 0x8408 : (fcs >> 1);
byte = byte >> 1;
}
return fcs;
}

我做错了什么吗?如果我发送 0xFF 或 0x00,我不会得到与我在 http://depa.usst.edu.cn/chenjq/www2/SDesign/JavaScript/CRCcalculation.htm 上所做的相同的校验和。

printf("%04X\n", crc16(0x31, 0xFFFF)); //returns 2F8D

最佳答案

我看了你的问题,我也遇到了和你一样的问题。

我已经解决了这个在 XMODEM 中计算 CRC-CCITT 的问题。这里附上计算CRC-CCITT的示例程序。

我已经用在线转换器和这个程序试过数据。如果您愿意,请使用它。

unsigned short crc16(char *ptr, int count)
{
int crc;
char i;
crc = 0;
while (--count >= 0)
{
crc = crc ^ (int) *ptr++ << 8;
i = 8;
do
{
if (crc & 0x8000)
crc = crc << 1 ^ 0x1021;
else
crc = crc << 1;
} while(--i);
}
return (crc);
}

CRC 应该定义为 unsigned short,因为 crc16 函数返回一个 unsigned short。 CRC 被定义为一个整数,在大多数系统上是 4 个字节。

关于c++ - CRC-CCITT实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17196743/

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