gpt4 book ai didi

c - 我应该给 crc16 方法提供什么输入

转载 作者:行者123 更新时间:2023-11-30 20:03:59 24 4
gpt4 key购买 nike

这是我的 Mod 总线 crc_16 嵌入代码。我已经在代码块中多次运行此代码。没有错误,但我没有得到实际的 crc 值。我应该得到 crc 05C8,而我现在得到 8512。

我认为我在调用 CRC 方法时输入了错误的输入。我正在传递字符串及其长度。所以请帮助我。

    #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define POLY 0x8005
unsigned int ModRTU_CRC(unsigned char * mod_data,unsigned int length)
{
unsigned int CRC16 = 0xFFFF;

unsigned int pos=0,i=0;

for(pos=0;pos<length;pos++)
{
CRC16 ^= (unsigned int) mod_data[pos];

for(i=0;i<8;i++)
{
if((CRC16 & 0x0001)!=0)
{
CRC16 >>=1;
CRC16^=0xA001;
}
else
{
CRC16 >>=1;
}
}

}

return CRC16;

}

int main()
{

//char *frame = "010600081388";
// char *frame = "010300080001";

char frame[7];
frame[0]=0x01;
frame[1]=0x03;
frame[2]=0x00;
frame[3]=0x08;
frame[4]=0x00;
frame[5]=0x01;
frame[6]='\0';


printf("%x\n",frame);
int len = strlen(frame);
unsigned int crcv = ModRTU_CRC(frame,len);
printf("%x\n",crcv);
return 0;
}

最佳答案

错误在于,在您的原始代码中,您使用了 frame[2]=0x00; 后跟 strlen(),这会将其解释为空终止符并给出错误的大小 2 而不是 6。您不能对二进制数据使用 strlen()

在“修复”版本中,您将大小硬编码为 6,因此错误被意外删除。它与 uint8_tchar 无关(尽管对于二进制数据使用 uint8_t 总是更好)。

关于c - 我应该给 crc16 方法提供什么输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44924383/

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