代码下载地址

CRCModelBus

查表的方法

const uint8 crc16_tab_h[] = {0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40
};const uint8 crc16_tab_l[] = {0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40
};uint16 calcCrc16(uint8 *data, int32 offset, int32 len, uint32 preval)
{uint32 ucCRCHi = (preval & 0xff00) >> 8;uint32 ucCRCLo =  preval & 0x00ff;int32 iIndex;int32 i;for (i = 0; i < len; ++i) {iIndex = (ucCRCLo ^ data[offset + i]) & 0x00ff;ucCRCLo = ucCRCHi ^ crc16_tab_h[iIndex];ucCRCHi = crc16_tab_l[iIndex];}return (((ucCRCHi & 0x00ff) << 8) | (ucCRCLo & 0x00ff)) & 0xffff;
}

直接计算的方法

uint16 calcCrc16(uint8 *data, int32 offset, int32 len, uint32 preval)
{uint16 crc= preval;int32 i, j;for (j=0; j < len; j++){crc ^= (uint8)data[offset + j];for ( i=0; i<8; i++){if(crc & 0x0001){crc >>= 1;crc ^= 0xa001;}else{crc >>= 1;}}}return crc;
}

CRCModelBus

直接计算

static uint16_t UpdateCRC16(uint16_t crcin,uint8_t data)
{uint32_t crc = crcin;uint32_t ins =(uint32_t) (data | 0x100);do{crc <<= 1;ins <<= 1;if((ins&0x100)==0x100){++crc;}if ((crc & 0x10000) == 0x10000){crc^=0x1021;}}while (!((ins & 0x10000) == 0x10000));return (uint16_t)crc;}uint16_t CRCXMODEM(uint8 *data, int32 len)
{uint32_t  num = 0;uint16_t crc = 0;uint32_t  i = 0;for(i=0; i<len; i++){crc = UpdateCRC16(crc, data[i]);}crc = UpdateCRC16(crc, 0);crc = UpdateCRC16(crc, 0);return crc;//crc.ToString("X2");
}

查表的方法

const unsigned short crc16_XMODEM_table[]= {0x0000,0x1021,0x2042,0x3063,0x4084,0x50A5,0x60C6,0x70E7,0x8108,0x9129,0xA14A,0xB16B,0xC18C,0xD1AD,0xE1CE,0xF1EF,0x1231,0x0210,0x3273,0x2252,0x52B5,0x4294,0x72F7,0x62D6,0x9339,0x8318,0xB37B,0xA35A,0xD3BD,0xC39C,0xF3FF,0xE3DE,0x2462,0x3443,0x0420,0x1401,0x64E6,0x74C7,0x44A4,0x5485,0xA56A,0xB54B,0x8528,0x9509,0xE5EE,0xF5CF,0xC5AC,0xD58D,0x3653,0x2672,0x1611,0x0630,0x76D7,0x66F6,0x5695,0x46B4,0xB75B,0xA77A,0x9719,0x8738,0xF7DF,0xE7FE,0xD79D,0xC7BC,0x48C4,0x58E5,0x6886,0x78A7,0x0840,0x1861,0x2802,0x3823,0xC9CC,0xD9ED,0xE98E,0xF9AF,0x8948,0x9969,0xA90A,0xB92B,0x5AF5,0x4AD4,0x7AB7,0x6A96,0x1A71,0x0A50,0x3A33,0x2A12,0xDBFD,0xCBDC,0xFBBF,0xEB9E,0x9B79,0x8B58,0xBB3B,0xAB1A,0x6CA6,0x7C87,0x4CE4,0x5CC5,0x2C22,0x3C03,0x0C60,0x1C41,0xEDAE,0xFD8F,0xCDEC,0xDDCD,0xAD2A,0xBD0B,0x8D68,0x9D49,0x7E97,0x6EB6,0x5ED5,0x4EF4,0x3E13,0x2E32,0x1E51,0x0E70,0xFF9F,0xEFBE,0xDFDD,0xCFFC,0xBF1B,0xAF3A,0x9F59,0x8F78,0x9188,0x81A9,0xB1CA,0xA1EB,0xD10C,0xC12D,0xF14E,0xE16F,0x1080,0x00A1,0x30C2,0x20E3,0x5004,0x4025,0x7046,0x6067,0x83B9,0x9398,0xA3FB,0xB3DA,0xC33D,0xD31C,0xE37F,0xF35E,0x02B1,0x1290,0x22F3,0x32D2,0x4235,0x5214,0x6277,0x7256,0xB5EA,0xA5CB,0x95A8,0x8589,0xF56E,0xE54F,0xD52C,0xC50D,0x34E2,0x24C3,0x14A0,0x0481,0x7466,0x6447,0x5424,0x4405,0xA7DB,0xB7FA,0x8799,0x97B8,0xE75F,0xF77E,0xC71D,0xD73C,0x26D3,0x36F2,0x0691,0x16B0,0x6657,0x7676,0x4615,0x5634,0xD94C,0xC96D,0xF90E,0xE92F,0x99C8,0x89E9,0xB98A,0xA9AB,0x5844,0x4865,0x7806,0x6827,0x18C0,0x08E1,0x3882,0x28A3,0xCB7D,0xDB5C,0xEB3F,0xFB1E,0x8BF9,0x9BD8,0xABBB,0xBB9A,0x4A75,0x5A54,0x6A37,0x7A16,0x0AF1,0x1AD0,0x2AB3,0x3A92,0xFD2E,0xED0F,0xDD6C,0xCD4D,0xBDAA,0xAD8B,0x9DE8,0x8DC9,0x7C26,0x6C07,0x5C64,0x4C45,0x3CA2,0x2C83,0x1CE0,0x0CC1,0xEF1F,0xFF3E,0xCF5D,0xDF7C,0xAF9B,0xBFBA,0x8FD9,0x9FF8,0x6E17,0x7E36,0x4E55,0x5E74,0x2E93,0x3EB2,0x0ED1,0x1EF0};unsigned short CRC16_XMODEM(unsigned char *puchMsg, unsigned int usDataLen)
{unsigned short CrcTemp = 0x0, index;{for (index = 0; index < usDataLen; index++){CrcTemp = ((CrcTemp << 8) & 0xff00) ^ crc16_XMODEM_table[((CrcTemp >> 8) & 0xff) ^ *(puchMsg++)];}}return CrcTemp;
}

测试代码

uint8_t crc16_f_data[]= {0x5A ,0x00 ,0x85 ,0x00 ,0x09 ,0x04 ,0x00 ,0x3C ,0x43 ,0x53 ,0x3E ,0x00 ,0x00 ,0x00 ,0x00 ,0xA0 ,0xD1 ,0x19 ,0x00 ,0x04,\0x00 ,0x00 ,0x00 ,0xC0 ,0x03 ,0x20 ,0x00 ,0xD3 ,0xF8 ,0xB0 ,0x6B ,0x72 ,0xEA ,0x97 ,0x4A ,0xE6 ,0x68 ,0x35 ,0xF3 ,0x6E,\0xB0 ,0x92 ,0xE6 ,0x6B ,0x40 ,0xEF ,0x51 ,0xCE ,0xAF ,0x7D ,0x21 ,0x64 ,0x11 ,0xB7 ,0xC2 ,0xEE ,0x13 ,0x9A ,0xEA ,0x60,\0x59 ,0x02 ,0x00 ,0x00 ,0x01 ,0x00 ,0x00 ,0x6C ,0x67 ,0x00 ,0x00 ,0x04 ,0x00 ,0x20 ,0x00 ,0x9F ,0x12 ,0xF8 ,0x39 ,0xBA,\0x8E ,0x68 ,0x05 ,0x81 ,0xEE ,0x4B ,0x64 ,0x81 ,0xE4 ,0xAE ,0x28 ,0x8A ,0x2E ,0xA6 ,0x41 ,0xDD ,0x89 ,0x88 ,0x90 ,0x1B,\0x04 ,0xDF ,0xA7 ,0x6A ,0x02 ,0x1C ,0xF0 ,0x00 ,0x30 ,0x00 ,0x00 ,0x60 ,0x5A ,0x02 ,0x00 ,0x2A ,0xAD ,0x00 ,0x00 ,0x04,\0x00 ,0x20 ,0x00 ,0xF4 ,0xFD ,0x78 ,0xE7 ,0x37 ,0xA8 ,0xD0 ,0x34 ,0x21 ,0x2D ,0xBE ,0x52 ,0xA5
};//7B 5D
uint8_t crc16_f1_data[]= {0x5A ,0x00 ,0x0F ,0x00 ,0x09 ,0x02 ,0x01 ,0x02 ,0x00 ,0x1E ,0x02 ,0x02 ,0x00 ,0x78 ,0x03,\0x02 ,0x00 ,0x8A};test_crc16_value = calcCrc16(crc16_f_data,0,sizeof(crc16_f_data),0xffff);printf("hello--:0x%x\n",test_crc16_value);//result:0X4DF9test_crc16_value = CRCXMODEM(crc16_f_data,sizeof(crc16_f_data));printf("hello--:0x%x\n",test_crc16_value);//result:0XB598test_crc16_value = calcCrc16(crc16_f1_data,0,sizeof(crc16_f1_data),0xffff);printf("hello--:0x%x\n",test_crc16_value);//result:0x7B5Dtest_crc16_value = CRCModelBus(crc16_f1_data,sizeof(crc16_f1_data));printf("hello--:0x%x\n",test_crc16_value);//result:0x7B5D

CRC16数据校验支持ModelBus和XMODEM校验模式(C语言)相关推荐

  1. C# CRC16数据校验支持ModelBus和XMODEM校验模式

    C# CRC16数据校验支持ModelBus和XMODEM校验模式 最近在研究C# CRC数据校验规则,之前用过ModelBus模式,但是这次的现场用到的是XMODEM模式,写一篇文章记录实现细节,方 ...

  2. mytrader-开源股票期货金融软件+支持C/C++/Python/Excel/VBA/麦语言的量化分析交易平台

    mytrader致力于为量化交易.算法交易.程序化交易以及技术分析爱好者打造最极致的行情分析交易平台. mytrader是一款基于ZQDB构建的量化分析交易平台. mytrader是绿色免安装版本,您 ...

  3. CRC-16/X25、CRC-16/CCITT_FALSE、CRC-16/XMODEM校验码

    这几天做北斗定位设备的协议解析,需要进行CRC-16的校验,设备使用的参数模型是CRC-16/X25,本人使用的是Java语言,网上没找到关于CRC-16/X25 的Java版本,都是C语言的多.转换 ...

  4. 将一个字符串计算出CRC16/XMODEM校验码(4位)

    将一个字符串计算出CRC16/XMODEM校验码(4位) unsigned short CRC16_XMODEM(unsigned char *puchMsg, unsigned int usData ...

  5. Java生成CRC16数据校验码

    CRC即循环冗余校验码(Cyclic Redundancy Check[1]  ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数 ...

  6. CRC校验原理及CRC-8简单校验函数设计

    CRC校验原理及CRC-8简单校验函数设计 CRC为循环冗余校验码,是一种常用的.具有检错.纠错能力的校验码.通常发送方在发送的数据之后,附上其CRC校验码.接收方收到数据后,也做同样的CRC校验,得 ...

  7. bean validation校验方法参数_Springboot 使用校验框架validation校验

    作者:双斜杠少年 blog.csdn.net/u012373815/article/details/72049796 b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上 ...

  8. form表单数字校验(二)——邮箱校验-当前页面

    form表单数字校验(二)--邮箱校验-当前页面 效果 代码 index.vue <el-form-item v-if='!isDisabled' label='邮箱'><el-in ...

  9. java护照号码校验_SpringBoot如何优雅的校验参数

    博客地址 :https://lqcoder.com 前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 ...

  10. e0312 不存在用户定义的_更加灵活的参数校验,Spring-boot自定义参数校验注解

    上文我们讨论了如何使用@Min.@Max等注解进行参数校验,主要是针对基本数据类型和级联对象进行参数校验的演示,但是在实际中我们往往需要更为复杂的校验规则,比如注册用户的密码和确认密码进行校验,这个时 ...

最新文章

  1. camera raw 滤镜预设_Camera Raw中利用预设实现批量化调色,PS这款滤镜真的很好用...
  2. svn 提交信息模板
  3. 超维计算理论可以让AI具有记忆和反应
  4. MySQL下mysql.sock丢失问题的解决[ubuntu, linux, mysqld.sock]
  5. word树状分支图_交互设计技能 | 抛弃Word,试试用Excel和Xmind来整理思路吧
  6. NumPy - 字符串函数
  7. 网络攻防 第四周学习总结
  8. [剑指offer][JAVA]面试题第[10-1]题[斐波那契数列][动态规划][记忆化递归]
  9. 5.数据结构 --- 数组和广义表
  10. [51单片机] 四相五线减速比为1/64步进电机驱动设计
  11. hive安装及常用命令
  12. python的前端和后端_python是前端还是后端
  13. Oracle卸载(无universal installer)
  14. layer:子父之间的数据传递
  15. linux运维工作内容及岗位要求
  16. 基于Redis的分布式锁真的安全吗?
  17. Linux 基础入门 08
  18. SpringMVC05:AJAX的使用
  19. XXX正在运行,点按即可了解详情或停止应用
  20. 操作系统实验3 页式地址重定位模拟

热门文章

  1. 中国大学慕课python答案第七章_中国大学慕课moocPython 语言程序设计mooc题库答案查询...
  2. 中国大学慕课《数据挖掘与python实践》期末测验版本3
  3. IP地址中的网络地址和主机地址分别是什么意思
  4. 翻译:俄国卫星GLONASS 简介 天基全球导航卫星系统 (GNSS)
  5. ubuntu16.04 安装为知笔记
  6. 2021芒部中学高考成绩查询,2021年镇雄县高考状元名单资料,今年镇雄县高考状元多少分...
  7. 清华牛人总结的数据分析笔记
  8. 联想电脑阻止c语言运行,联想电脑运行程序打不开怎么解决
  9. 「Thymeleaf页面在浏览器加载不出来」
  10. 无刷直流电机 PWM控制