CRC位域4单表查表及建表原则:

左移位域4取列表16个,大端存储模式。右移位域4取行表16个,小端存储模式。

在CRC16CCITT中CRC的多项式为:左移CRC16=X16+X12+X5+1,即权值=0x1021,故建立16字节的CRC表格:

(参见:https://zh.wikipedia.org/zh-cn/%E5%BE%AA%E7%8E%AF%E5%86%97%E4%BD%99%E6%A0%A1%E9%AA%8C)

特别注意:它的初值为0xFFFF,只用一次,本次的结果即为下次的初值,故与CRC表的构造无关。

网上CRC16的256个表为:

unsigned int CRC16Table[256] = {

0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,//注意本行的0x1021

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

};

即CRC位域8表:

CRC16Table[256]={CRC[0x0000],CRC[0x0001],CRC[0x0002],...CRC[0x00FD],CRC[0x00FE],CRC[0x00FF]};

特别注意对CRC表逆向出权值的方法(256表):

右移方式,CRC多项式即权值=CRC16Table[0x80]

左移方式,CRC多项式即权值=CRC16Table[0x01]=0x1021

本文采用CRC位域4查表方式,故表为:

CRC16Table[16]={CRC[0x0000],CRC[0x0001],CRC[0x0002],...CRC[0x000D],CRC[0x000E],CRC[0x000F]};

即左移方式取列表:

CRC16Table[16]={

0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,//注意本行的0x1021

0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,

};

unsigned int GetCRC16(unsigned int crcinit, unsigned int crcval)

{//(可以不要初值crcinit,多字节CRC16时入口需要对crcval做处理)

unsigned int i, crc="0";

crcval = crcinit ^ crcval;//初值为0xFFFF,只用一次,函数下次调用时crcinit=crc

for(i = 0;i < 4;i ++)//2个字节位域4需要4次完成

{//左移12次可认为是大端存储模式

crc = (crc << 4) ^ CRC16Table[((crc ^ crcval) >> 12) & 0x0F];//位域宽4单表16个字节

crcval <<= 4;//准备下一个位域,域宽4

}

return crc;//本次crc结果,做为下次GetCRC16()调用的初值crcinit,切记!!!

}

菜农HotPower@126.com 2009.10.18 于雁塔菜地

crc16 c语言 非查表,CRC16CCITT(1021)的16字表长查表程序相关推荐

  1. mysql单表查询实验心得_5000字总结MySQL单表查询,新手看这一篇足够了!

    4.过滤 工作用的数据库表中一般包含大量数据,很少会一次全部查询,所以会使用where子句加过滤条件来查询我们需要的数据. 认识操作符 比较操作符 =(等于),<>.!=(不等于),=(大 ...

  2. day38 mycql 初识概念,库(增删改查),表(增删改)以及表字段(增删改查),插入更新操作...

    在Navicat中把已经生成的表逆向成模型 数据库上,右键-逆向数据库到模型 ego笔记: 增删改查 文件夹(库)增create database day43 charset utf8;改alter ...

  3. 五种C语言非数值计算的常用经典排序算法

    摘要:排序是计算机的一种操作方法,其目的是将一组"无序"的记录序列调整为"有序"的记录序列,主要分为内部排序和外部排序. 排序 排序是计算机的一种操作方法,其目 ...

  4. 三种CRC16 C语言算法理解(CCITT)

    三种CRC16的算法实现,结合自己的理解记录一下: 一.先说算法的C语言实现和各算法的优缺点: 1.按位计算CRC 代码如下 uint16_t crc_16(uint8_t *data, uint16 ...

  5. R语言非独立多分组非参数检验、Kruskal–Wallis检验进行非独立多分组非参数检验(Nonparametric multiple comparisons)、当ANOVA不满足条件的情况下

    R语言非独立多分组非参数检验.Kruskal–Wallis检验进行非独立多分组非参数检验(Nonparametric multiple comparisons).当ANOVA不满足条件的情况下.R语言 ...

  6. R语言使用reshape2包的dcast函数将dataframe从长表到宽表(Long- to wide-format)、指定单个标识符、、表格转化的时候值不唯一设置聚合函数(均值)

    R语言使用reshape2包的dcast函数将dataframe从长表到宽表(Long- to wide-format).指定单个标识符..表格转化的时候值不唯一设置聚合函数(均值) 目录

  7. 已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在tab表中,要查的学生学号放在变量no中,查表结果放在变量english中。

    已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在tab表中, 要查的学生学号放在变量no中,查表结果放在变量english中. data segmenttab db 68,78,42,84 ...

  8. 技术非中立,语言非同质:机器翻译正被用于维护文化障碍

    作者:王晔 转载自:AI科技评论 原文链接: 技术非中立,语言非同质:机器翻译正被用于维护文化障碍​mp.weixin.qq.com/s/t72b7um6FcKWoe3vvAigDw 当今世界随着大数 ...

  9. php 中curd表达啥,CURD语句的基本语法和PDO中操作数据表的基本步骤实例演示增删改查命令 2019年07月24日 23时10分...

    一.常用的CUR 最常用的就是: `CURD` 增删改查   它代表创建(Create).更新(Update).读取(Read)和删除(Delete)操作. 新增操作语法 * SQL规范: `INSE ...

最新文章

  1. 找回丢失的mysql root 用户密码
  2. 头秃元凶「真面目」首次被揭穿,鹅厂程序员立功了 | Nature子刊
  3. 第一个程序实现登录功能,密码输错三次封账号。
  4. Docker源码分析(十):Docker镜像下载
  5. 05-xpath爬虫数据解析
  6. 某人一定不会的——重口味线段树
  7. 【计算机系统设计】实践笔记(4)改进数据通路:第一类I型指令分析与实现
  8. 码元、波特、速率、带宽
  9. 在Visio里加上、下标方法
  10. python 百度ai 牌照识别_Python用百度AI实现文字识别功能!(银行卡,营业执照,等识别)...
  11. Tkinter模块GUI图形化编程实战(八)——中国象棋(含超详解及完整源码、完整程序免费下载链接)
  12. u盘如何安装2003服务器系统,怎么用u盘安装2003系统安装教程
  13. 像“钢铁侠”埃隆·马斯克那样,成为超速学习者
  14. IDEA快速XXL-JOB
  15. 中国自由软件推广先锋的自述,心潮澎湃的一往无前,一定要看!作者:洪峰...
  16. 电子发票全流程电子化管理指南-摘要
  17. 九十年前到江西(2009-06-09)
  18. 王者荣耀android换ios,2021王者荣耀安卓账号可以转苹果吗 2021年安卓账号转移到ios方法...
  19. SecureCRT显示乱码的解决办法(centos)
  20. vue2存储数据方法

热门文章

  1. MySQL必知必会(3)
  2. 微信H5分享朋友圈踩坑
  3. 调皮的表情图(Emoji)
  4. XXE漏洞以及XXE漏洞如何修复
  5. 【转载】最新读《你当像鸟飞往你的山》读后感心得体会5篇精选
  6. 4个女人要过一座桥的问题
  7. acc 蓝牙_蓝牙耳机≠音质差,只是你没选对耳机
  8. hadoop入门6:hadoop查询两两之间有共同好友,及他俩的共同好友都是谁
  9. 昨日种种死 今日种种生
  10. windows11 mars xlog解密环境配置