CRC16 校验结算
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:使用多种方法死磕实现 CRC16的校验码计算
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
CRC16 算法的应用场景 :
1、Modbus RTU 中的校验码
2、欢迎补充
提示:以下是本篇文章正文内容,下面案例可供参考
一、CRC16 的算法
二、C语言实现
使用 IDE 工具 Visual Studio 2022 。
使用Switch case 语句,需要多个程序运行周期才能计算出结果。
使用 函数 方法,1个周期内便能计算出结果,拖长程序运行周期。
1.使用Switch Case 语句实现
代码如下(示例):
#include<stdio.h>
#include<string.h>
void main() {
printf(" hello world ");
int CRC_Buffer[255] = {
0x01,0x03,0x40,0x28,0x00,0x0E };
int CRC_Size;
CRC_Size = 6;
int CRC_Init = 0;
int POLY = 0;
int dtn = 0;
int sht = 0;
int step = 0;
int CRC_Init_old = 0;
int CRC_Result = 0;
//printf("sizeof short, %d\n", sizeof(short));
_Bool CRC16_calculate;
CRC16_calculate = 1;
int CRC16_MSB, CRC16_LSB;
while (CRC16_calculate)
{
printf(" +++++ while ++++++ \n ");
switch (step)
{
//printf(" Step 1 --- --- sht : %d\n " , sht);
case 0:
CRC_Init = 0xffff;
POLY = 0xA001;
dtn = 0;
step = 1;
// printf(" Step 0 --- CRC_Init_old : -- %x\n", CRC_Init_old);
// printf(" Step 0 --- CRC_Init : -- %x\n", CRC_Init);
//printf(" Step 0 --- POLY : -- %x\n", POLY);
break;
case 1:
sht = 0;
//printf(" Step 1 --- --- sht : %d\n " , sht);
//printf(" Step 1 --- --- dtn : %d\n ", dtn);
step = 2;
break;
case 2:
printf(" Step 2 --- CRC_Buffer[dtn] : -- %x\n", CRC_Buffer[dtn]);
CRC_Init =