如何解决帮助 40Bits 消息中的 7bits CRC消息需要以种子值作为初始值
嗨,我正在为我的项目实现 CRC 计算功能。 参数如下
polynomial : x7 + x5 + x4 + x2 + x +1 --> 0xB7(0b10110111)
Seed Value : 0b1110000 --> 0x70
Message Example --> 0x 84 80 00 00 00(message[5]={0x00(pending zero for CRC bit),0x00,0x08,0x84})
到目前为止,我所知道的是我需要用 " message[4] (0x84) XOR seedvalue "
的种子值来初始化消息,
然后消息变成message[4] = {0x00,0x64}
,我在C中搜索了一些关于CRC算法和示例代码的信息。
因此我用上面的参数编写了CRC计算函数,这是我的代码:
#include <stdio.h>
typedef unsigned char uint8_t;
uint8_t crc=0 ;
uint8_t polyNOMIAL =0xB7 ;
uint8_t crcCount(uint8_t message[],uint8_t byte)
{
for(int i =0; i <byte ; i++)
{
crc ^=message[i] ;
for( int bit =0 ; bit< 8; bit++)
{
if((crc & 0x40U))
{
crc = (crc << 1) ^ polyNOMIAL ;
}
else
{
crc <<=1u ;
}
}
}
return crc ;
}
int main()
{
uint8_t c_value ;
uint8_t message[5]={0x00,0x64};
c_value = crcCount(message,5);
printf("CRC = 0x%x",c_value);
return 0;
}
我得到了错误的答案 CRC = 0x33
,因为答案是 0x7D
。
有没有人可以教我哪个部分是错的??多谢!!
我在这个问题上纠结了一段时间。
解决方法
对不起!!我发布了错误的代码,上面的代码是我的第一个版本!!!
消息应该是 0x8408000000,message[5]={0x84,0x08,0x00,0x00}
,
在初始是 message[5]={0x64,0x00}; 0x84 ^ (0x70 <<1) = 0x64
之后,最后一个版本代码如下:
#include <stdio.h>
typedef unsigned char uint8_t;
uint8_t crc=0 ;
uint8_t POLYNOMIAL =0xB7 ;
uint8_t crcCount(uint8_t message[],uint8_t byte)
{
for(int i=0; i < byte ; i ++)
{
crc ^=message[i] ;
for( int bit =0 ; bit< 8; bit++)
{
if((crc & 0x80))
{
crc = (crc <<1) ^ (POLYNOMIAL<<1) ;
}
else
{
crc <<=1u ;
}
}
}
return crc >>1 ;
}
int main()
{
uint8_t c_value ;
uint8_t message[5]={0x64,0x00};
c_value = crcCount(message,5);
printf("CRC = 0x%x",c_value);
return 0;
}
答案是0x7D
,但应该是0x56
,还是错了
抱歉犯了一个愚蠢的错误.........
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。