91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 2KB
    文件類型: .zip
    金幣: 2
    下載: 1 次
    發布日期: 2021-06-04
  • 語言: C/C++
  • 標簽: CRC8??CRC16??CRC32??

資源簡介

用表驅動法來實現CRC8、CRC16、CRC32的數據校驗,程序簡潔,通俗易懂

資源截圖

代碼片段和文件信息

#include?“crc.h“

//計算機存儲最小單位是字節存儲順序(小端模式)為低位字節在前高位在后
#define?MSB_MODE??1?//大端模式
#define?LSB_MODE??0

static?void?_InvertU8(uint8_t?*dBuf?uint8_t?*srcBuf);
static?void?_InvertU16(uint16_t?*dBuf?uint16_t?*srcBuf);
static?void?_InvertU32(uint32_t?*dBuf?uint32_t?*srcBuf);

typedef?bool?(*pFunc)();

typedef?struct{
????uint16_t??initVal;
????uint16_t??POLY;
????uint16_t??sub;
????uint8_t???bits;
????char ??*funcName;
}crc16_Table_TypeDef;
static?const?crc16_Table_TypeDef?CRC16_Table[]?=?{
????{0x0000?0x1021?0x0000?LSB_MODE?“CRC16_CCITT“}
????{0xFFFF?0x1021?0x0000?MSB_MODE?“CRC16_CCITT_FLASE“}
????{0x0000?0x1021?0x0000?MSB_MODE?“CRC16_XMODEM“}
????{0xFFFF?0x1021?0xFFFF?LSB_MODE?“CRC16_X25“}
????{0xFFFF?0x8005?0x0000?LSB_MODE?“CRC16_MODBUS“}
????{0x0000?0x8005?0x0000?LSB_MODE?“CRC16_IBM“}
????{0x0000?0x8005?0xFFFF?LSB_MODE?“CRC16_MAXIM“}
????{0xFFFF?0x8005?0xFFFF?LSB_MODE?“CRC16_USB“}
};

typedef?struct{
uint8_t?initVal;
uint8_t?POLY;
uint8_t sub;
uint8_t?bits;
char *funcName;
}crc8_Table_TypeDef;
static?const?crc8_Table_TypeDef?CRC8_Table[]?=?{
{0x00?0x07?0x00?MSB_MODE?“CRC8“}
{0x00?0x07?0x55?MSB_MODE?“CRC8_ITU“}
{0xFF?0x07?0x00?LSB_MODE?“CRC8_ROHC“}
{0x00?0x31?0x00?LSB_MODE?“CRC8_MAXIM“}
};

typedef?struct{
uint32_t?initVal;
uint32_t?POLY;
uint32_t?sub;
uint8_t??bits;
char? ?*funcName;
}crc32_Table_TypeDef;
static?const?crc32_Table_TypeDef?CRC32_Table[]={
{0xFFFFFFFF?0x04C11DB7?0xFFFFFFFF?LSB_MODE?“CRC32“}
{0xFFFFFFFF?0x04C11DB7?0x00000000?MSB_MODE?“CRC32_MPEG-2“}
};

uint16_t?calc_crc16(uint8_t?Mode?uint8_t?*pMsg?uint16_t?Len){
//????printf(“?%d?\n“?sizeof(Table)/sizeof(funcTable_TypeDef));
????if(Mode?>?sizeof(CRC16_Table)/sizeof(crc16_Table_TypeDef))
????????return?0;

uint16_t?CRCin?=?CRC16_Table[Mode].initVal;
uint8_t ?tmp?=?0;

printf(“CRC_Mode:?%s\n“?CRC16_Table[Mode].funcName);

????for(uint16_t?i=0;i tmp?=?*(pMsg++);
????????if(CRC16_Table[Mode].bits?==?LSB_MODE){
_InvertU8(&tmp?&tmp);
}
CRCin?^=?(tmp?< for(uint8_t?j=0;j<8;j++){
if(CRCin?&?0x8000){
CRCin?=?(CRCin?< }else{
CRCin?=?CRCin?< }
}
????}
if(CRC16_Table[Mode].bits?==?LSB_MODE){
_InvertU16(&CRCin?&CRCin);
}
return?(CRCin?^?CRC16_Table[Mode].sub);
}

uint8_t?calc_crc8(uint8_t?Mode?uint8_t*pMsg?uint16_t?Len){
if(Mode?>?sizeof(CRC8_Table)/sizeof(crc8_Table_TypeDef))
????????return?0;

uint8_t?CRCin?=?CRC8_Table[Mode].initVal;
uint8_t?tmp?=?0;

printf(“CRC_Mode:?%s\n“?CRC8_Table[Mode].funcName);

for(uint16_t?i=0;i tmp?=?*(pMsg++);
if(CRC8_Table[Mode].bits?==?LSB_MODE){
_InvertU8(&tmp?&tmp);
}
CRCin?^=?tmp;
for(uint8_t?j=0;j<8;j++){
if(CRCin?&?0x80){
CRCin?=?(CRCin?< }else{
CRCin?<<=?1;
}
}
}
if(CRC8_Table[Mode].bi

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????143??2019-03-15?16:24??readme.url
?????文件?????????357??2019-03-15?14:23??crc.h
?????文件????????4580??2019-03-15?15:04??crc.c

評論

共有 條評論