DSP学习--BCC校验(异或校验)
Posted 聚优致成
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DSP学习--BCC校验(异或校验)相关的知识,希望对你有一定的参考价值。
检验值(LRC) Data 部分数据各字节异或值。
参看:BCC校验(异或校验)在线计算
#include <stdio.h>
#include <string.h>
#include <stdint.h>
static void strToHex(char* pbDest, char* pbSrc, int nLen, int* frameLen)
uint32_t tmpLen = 0;
char h1, h2;
char s1, s2;
char tmppbSrc[65535] = 0 ;
for (int j = 0; j < nLen; j++)
if (pbSrc[j] != '\\0')
if (pbSrc[j] != ' ')
tmppbSrc[tmpLen] = pbSrc[j];
tmpLen++;
if (pbSrc[j] == '\\n')
pbSrc[j] = '\\0';
else
break;
*frameLen = tmpLen / 2;
for (uint32_t i = 0; i < tmpLen / 2; i++)
h1 = tmppbSrc[2 * i];
h2 = tmppbSrc[2 * i + 1];
s1 = toupper(h1) - 0x30;
if (s1 > 9)
s1 -= 7;
s2 = toupper(h2) - 0x30;
if (s2 > 9)
s2 -= 7;
pbDest[i] = s1 * 16 + s2;
static void check_bit(uint8_t* Databuf, uint32_t frameLen, uint8_t* CheckBit)
uint8_t data_check = 0, cfgTail = 0;
//uint32_t len = 0;
//memcpy(&len, &Databuf[4], 1);
//if ((len - 1) == frameLen)
//
for (uint32_t i = 0; i < frameLen; i++)
cfgTail = cfgTail ^ Databuf[i];
data_check = cfgTail;
printf("校验码为: %02X\\n", data_check);
sprintf(CheckBit, "%c%02X", ' ', data_check);
printf("\\n\\n\\n[带校验码数据已保存到 CRC.txt]\\n");
//
//else
//
// printf("[ERROR: Data Len is incorrect!!]\\n");
// getchar();
//
static int Get_check_bit(void)
char CRCData[65536] = 0 ;
char CRCData1[65536] = 0 ;
char CheckBit[20] = 0 ;
FILE* file = NULL;
file = fopen ("CRC.txt", "a+");
if (NULL == file)
printf("file open fault!\\n");
return -1;
if (fgets(CRCData, 65536, file) != NULL)
if (fgets(CRCData1, 65536, file) != NULL)
if (strcmp(CRCData1, "\\n") == 0)
printf("[ERROR: 需要校准的数据,换行太多了!]\\n");
getchar();
if (strcmp(CRCData1, "Check Out Data:\\n") == 0)
printf("[ERROR: 数据已经校准了!]\\n");
getchar();
int frameLen = 0;
char buf[65535] = 0 ;
strToHex(buf, CRCData, sizeof(buf), &frameLen);
check_bit(buf, frameLen, CheckBit);
CRCData[frameLen * 3 - 1] = '\\0';
strcat(CRCData, CheckBit);
fputs("\\nCheck Out Data:\\n", file);
fputs(CRCData, file);
fclose(file);
return 0;
int main(int argc, char* argv[])
printf("[注意: CRC.txt 文件内不能包含校验码]\\n\\n\\n");
Get_check_bit();
getchar();
return 0;
测试:
CRC.txt 内容:
30 01 03
Check Out Data:
30 01 03 32
以上是关于DSP学习--BCC校验(异或校验)的主要内容,如果未能解决你的问题,请参考以下文章