crc校验码计算方法是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了crc校验码计算方法是啥?相关的知识,希望对你有一定的参考价值。
1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。
2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。
例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。
扩展资料:
注意事项
是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接收方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
应满足以下条件:
1、生成多项式的最高位和最低位必须为1。
2、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。
3、不同位发生错误时,应该使余数不同。
4、对余数继续做除,应使余数循环。
参考技术A已知信息位为1100,生成多项式G(x) = x3+x+1,求CRC码。
M(x) = 1100 M(x)*x3 = 1100000 G(x) = 1011
M(x)*x3 / G(x) = 1110 + 010 /1011 R(x) = 010
CRC码为: M(x)*x 3+R(x)=1100000+010 =1100010
其原理是:CRC码一般在k位信息位之后拼接r位校验位生成。编码步骤如下:
(1)将待编码的k位信息表示成多项式 M(x)。
(2)将 M(x)左移 r 位,得到 M(x)*xr 。
(3)用r+1位的生成多项式G(x)去除M(x)*xr 得到余数R(x)。
(4)将M(x)*xr 与R(x)作模2加,得到CRC码。
扩展资料:
CRC校验码计算详解:采用CRC进行差错检验,生成多项式为G(X)=X4+X+1,信息码字为10110,则计算出的CRC校验码是:A. 0000 B. 0100 C. 0010 D.1111
符号表示假定:多项式和多项式的系数排列均用相同的符号表示,如
G(X)= X4+X+1
G(X)=10011
已知条件如下:
原码字记做M(X),即:M(X) = 10110
生成多项式记做G(X),即:G(X) = 10011
G(X)的最高阶数记做r,此处r = 4
谁会crc16-ccitt的计算方法,用winform做的,谢谢啦。。。
要求crc16-ccitt初始值是0xFFFF,多项式是0x1021,验证方法:如输入十六进制的12,那么得到的校验码就是3DBA,如果不是这么多,那么就是错的了,请勿灌水,结果正确立马给分!
参考技术A用boost的算不算?crc计算部分用C++写,调用boost库计算,编译成dll
C#那边直接调用C++的dll来算结果
压缩包包含winform的代码和C++的代码以及用VC2010编译出来供C#调用的dll
C#部分由VS2012做成,如果你打不开工程,请新建一个C#工程然后把原有代码文件全部删掉,把我的代码加进去,编译,dll拷到debug目录下,运行即可。
字符串"12"计算出来确实是3DBA,十六进制的12算出来不是3DBA
这位兄弟,我用了一下,确实很好,感谢你的回答。当时我看错了发成了ascii码了,所以才得出3DBA,是我的问题。输入12,结果应该是D383的,既然你有dll,能不能把C#的源码给我,或者再麻烦编译一下,转成hex的,算成D383的,在此衷心感谢呀。
追答网上找了一套纯C#实现的代码,套进来用了
我自己实在是写不出来了……
以上是关于crc校验码计算方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
谁会crc16-ccitt的计算方法,用winform做的,谢谢啦。。。
modbus RTU通信时,CRC验证码怎样计算?是不是有快捷简单的方法?麻烦举例一下(原理很难懂啊)